getline(cin, string_name) 之前需要 cin.get()

Posted

技术标签:

【中文标题】getline(cin, string_name) 之前需要 cin.get()【英文标题】:Need of cin.get() before getline(cin, string_name) 【发布时间】:2017-04-09 21:19:30 【问题描述】:

我有一个简单的程序来输出 2 个整数的总和,加倍并连接 2 个字符串。这是我运行良好的代码:

int main() 
    int i = 4;
    double d = 4.0;
    string s = "HackerRank ";  
    // Declare second integer, double, and String variables.
    int i2;
    double d2;
    string s2;

    // Read and save an integer, double, and String to your variables.
    cin>>i2;
    cin>>d2;
    cin.get();
    getline(cin, s2);

    // Print the sum of both integer variables on a new line.
    cout<<i+i2<<endl;

    // Print the sum of the double variables on a new line.
    cout<< setprecision(1)<<fixed<<d+d2<<endl; 

    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first.
    cout<<s+s2;
    return 0;

但是,如果我删除语句cin.get(),则字符串s2 的输入不会发生。为什么会这样??

我认为这与流/输入缓冲区和 getline(cin, ) 的内部编码有关。此外,当我使用 cin.getline() 时,程序会出错。

【问题讨论】:

Using getline(cin, s) after cin的可能重复 【参考方案1】:

试试:

cin.ignore(); 

然后

getline(cin, s2);
cin.ignore();

这将刷新输入流。

【讨论】:

以上是关于getline(cin, string_name) 之前需要 cin.get()的主要内容,如果未能解决你的问题,请参考以下文章

cin,cin.get(),cin.getline(),getline()

std::cin.getline() 与 std::cin

使用 `cin >> n;` 后使用 `getline(cin, s);`

cin.get() 和 cin.getline() 之间的区别

使用 cin.getline() 和 cin.get()

转 cincin.get()cin.getline()getline()gets()等函数的用法