#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;
}
输出:
Input an integer a= 1
1
Input a string str=
End program
fflush()之后的getline
不起作用。
答案 0 :(得分:0)
fflush(stdin)
是未定义的行为,因为fflush()的行为仅为输出流定义。此外,这是一个“C风格”功能,不应与C ++控制台I / O结合使用。
您可以在之前的cin通话后直接添加cin.get()
,而不是fflush(),您可以放弃新的字符:
cin >> num;
cin.get();
答案 1 :(得分:0)
当程序提示“输入整数a =”时,键入1并输入,因此在cin >> num;
之后,换行符仍保留在流中。然后新行将分配给str
。这就是为什么你认为getline
之后fflush
(正如Lundin的答案所说,fflush(stdin)
是未定义的行为)不起作用。
在cin.ignore(A_BIG_NUM, '\n');
之前使用getline
忽略新行。