为什么 getline() 跳过输入,即使在 cin.clear() 之后?

新手上路,请多包涵

所以我有一个函数可以不断跳过第一个 getline 并直接跳到第二个。我试图清除缓冲区但仍然没有运气,这是怎么回事?

 void getData(char* strA, char* strB)
{
    cout << "Enter String 1: ";               // Shows this line
    cin.clear();
    cin.getline(strA, 50);                    // 50 is the character limit, Skipping Input

    cout << endl << "Enter String 2: ";       // Showing This Line
    cin.clear();
    cin.getline(strB, 50);                   // Jumps Straight to this line
}

原文由 Derp 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 900
2 个回答

确保您没有使用 cin >> str 。在调用函数之前。如果你使用 cin >> str 然后想使用 getline(cin, str) ,你必须先调用 cin.ignore()

 string str;
cin >> str;
cin.ignore(); // ignores \n that cin >> str has lefted (if user pressed enter key)
getline(cin, str);

如果使用 c 字符串:

 char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);

ADD :你的错误可能不在函数本身,而是 调用函数之前。流 cin 必须首先读取一个换行符 \n' cin.getline

原文由 user586399 发布,翻译遵循 CC BY-SA 3.0 许可协议

在使用 get 行进行更大输入后,cin 会导致错误。因此,在 getline 之后使用此代码将输入队列和下降位恢复正常。

 cin.getline(a,5);
    while(getchar()!='\n');
    cin.clear();

运行一个while循环以从队列中删除所有字符 cin.ignore() 导致进一步输入出现问题,而 cin.clear() 只是重置fallbit

原文由 Jayant Chaudhary 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题