只需写3-4行即可重现该问题。在“ for循环”中使用cin >>重复获取输入后,始终跳过所有下一个cin >> (s)

cin以外的所有其他东西都可以正常工作。(只想知道为什么会发生这种情况,我该怎么做才能在程序中进一步使用cin)。

for(int x;cin >> x;){
        cout << x <<endl;
}
int a;
cin >>a;


没有错误讯息。

最佳答案

使cin >> x失败(破坏循环)的任何操作也会影响cin >> a,因为这是相同的dang命令!

对象cin不会“知道”您的循环逻辑,操作系统/终端也不知道,通常也不会知道您打算在循环中断后进行某种“复位”。您必须自己发信号。但是,您可能不能仅仅对此进行修补,原因是:


如果按Ctrl + C结束程序,则程序已结束。
如果您按Ctrl + D(Linux / macOS)或Ctrl + Z(Windows),则为流提供了“文件结束”条件,它将不再接受。 std::cin对象上将设置EOF标志,并且该标志将持续存在。 (有时您可以手动清除此内容,但我不建议您这样做,因为您可能会在发送端感到困惑,具体取决于您的平台……)


您将必须找到另一种打破循环的方法,或者通过一些“魔术保留数”,通过使用更复杂的输入协议,仅读取一些初始输入数n或其他取决于您的内容的方式试图做。

关于c++ - Cin在for循环中使用后被跳过,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56495053/

10-13 09:29