2015-04-17 55 views
0
#include <iostream> 
#include <string> 
using namespace std; 

int main(){ 
    int num; 
    string str; 

    cout << "Input an integer a= "; 
    cin >> num; 
    cout << num << endl; 
    cout << "Input a string str= "; 
    fflush(stdin); 
    getline(cin,str); 
    cout << str << endl; 
    cout << "End program" << endl; 
    return 0; 
} 

输出工作:函数getline后不fflush

Input an integer a= 1 
1 
Input a string str= 
End program 

fflush后getline()不工作。

+0

我不知道答案,但它不完全是getline()问题。如果你没有先读取'num',getline()就可以了。 –

+0

尝试使用'getchar();'而不是'fflush(stdin);' –

+0

@酷人:谢谢,人:) – Lawliet

回答

0

fflush(stdin)是未定义的行为,因为fflush()的行为仅为输出流定义。此外,这是“C风格”功能,不应与C++控制台I/O结合使用。

相反fflush(),你可以通过你以前的CIN电话后直接加入cin.get()丢弃换行字符的:

cin >> num; 
cin.get(); 
0

时,程序会提示你“输入一个整数=”,键入1和输入,因此在cin >> num;之后,换行符保留在流中。然后新行将被分配到str。这就是为什么你认为fflush之后的getline(正如Lundin的回答所说,fflush(stdin)是未定义的行为)不起作用。

使用cin.ignore(A_BIG_NUM, '\n');之前getline忽略新行。