程序正在跳过getline()/ C ++

时间:2016-12-17 12:13:18

标签: c++ string std cin getline

每当我尝试运行此代码时:

string title;
        int Choice;
        cout<<"1. Insert new term ";
        cin>>Choice;
        if (Choice==1)
        {
            getline(cin,title);
        }

程序只读取选择并结束整个过程:/,请帮助:D

2 个答案:

答案 0 :(得分:1)

cin>>Choice;将尾随换行符留在输入缓冲区中。而且getline(cin,title);读取空行。

通常,最好不要将格式化输入与getline混合在同一个流中。

快速简便的解决方法是使用std::basic_istream::ignore从流中删除尾随的换行符,如下所示:

cin.ignore(2, '\n');

答案 1 :(得分:0)

在此声明之后

    cin>>Choice;
输入缓冲区将包含按Enter键的新行字符。

所以getline

的下一个声明
    if (Choice==1)
    {
        getline(cin,title);

读取空字符串,直到遇到新行字符。

在此声明之前插入以下调用

    #include <limits>

    //...


    {
        getline(cin,title);
        std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );

清除缓冲区。