我这里有两个问题。
当我输入一个有效的输入(正数)时,它被成功放入 vector ,然后返回到下一个空白行等待另一个输入时 它应该再次问同样的问题。确实如此。只是每个其他输入 为什么它会停在这样的空白行上?
我怎样才能重新安排它以便 Ctrl+Z 将发出文件结束信号而不是失败 无效输入?
do { cout << "\nPlease enter a homework score<'Ctrl-z' when done>: "; cin >> value; while(cin.fail() || value < ZERO) { cout << "not a valid positive numerical value. try again. \n"; cin.clear(); cin.ignore(numeric_limits<int>::max(),'\n'); cout << "\nplease enter a valid homework score<'Ctrl-z' when done>: "; cin >> value; } assignmentScore.push_back(value); }while(cin >> value);
最佳答案
你的问题没有显示的原因是你问了两次,只显示了一次问题。你第一次问就在第一次
cout << "..."
之后线。第二次是在while循环条件:while (cin >> value)
.第二次是不必要的,而且是一个如此不寻常的构造,以至于我一直错过了它,直到我在调试器中运行它:)通过重新排列代码,您可以避免重复问题的输出。参见 my other answer有关此类代码结构的示例。寻找
do() ... while (not ok)
.通常情况下,您永远无法到达标准输入流的文件结尾。唯一到达的时间是另一端(终端)关闭“管道”时。这意味着一旦你到达文件末尾,你将永远无法读取任何其他内容——此时你的程序是静音的,并且永远不会再获得任何输入。这可能不是您想要的。使用标记值(例如“键入 -1 以完成”)的建议更有意义。
关于c++ - 我如何重新排列它以便输入 Ctrl-z(文件结束信号)中断循环,同时仍在 C++ 中测试有效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680796/