fflush后,getline不起作用

时间:2015-04-17 13:23:25

标签: c++ xcode getline

#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不起作用。

2 个答案:

答案 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忽略新行。