c++ - 我如何重新排列它以便输入 Ctrl-z(文件结束信号)中断循环,同时仍在 C++ 中测试有效输入

标签 c++ string validation parsing io

我这里有两个问题。

  1. 当我输入一个有效的输入(正数)时,它被成功放入 vector ,然后返回到下一个空白行等待另一个输入时 它应该再次问同样的问题。确实如此。只是每个其他输入 为什么它会停在这样的空白行上?

  2. 我怎样才能重新安排它以便 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);
    

最佳答案

  1. 你的问题没有显示的原因是你问了两次,只显示了一次问题。你第一次问就在第一次cout << "..."之后线。第二次是在while循环条件:while (cin >> value) .第二次是不必要的,而且是一个如此不寻常的构造,以至于我一直错过了它,直到我在调试器中运行它:)

  2. 通过重新排列代码,您可以避免重复问题的输出。参见 my other answer有关此类代码结构的示例。寻找do() ... while (not ok) .

  3. 通常情况下,您永远无法到达标准输入流的文件结尾。唯一到达的时间是另一端(终端)关闭“管道”时。这意味着一旦你到达文件末尾,你将永远无法读取任何其他内容——此时你的程序是静音的,并且永远不会再获得任何输入。这可能不是您想要的。使用标记值(例如“键入 -1 以完成”)的建议更有意义。

关于c++ - 我如何重新排列它以便输入 Ctrl-z(文件结束信号)中断循环,同时仍在 C++ 中测试有效输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18680796/

相关文章:

c++ - 将应用程序作为 Windows 服务运行是否需要管理员权限?

c++ - 如何使用适用于 C 和 C++ 的 GSOAP 访问 Amazon AWS S3?

c++ - 使用 std::vector 或数组初始化 boost 矩阵

java - 如何重新排列数组以使空值占据数组的开头?

c++ - 从字符串中删除计数大于或等于突发长度的相邻重复项

validation - 获取失败约束的名称

Javax 验证不给出错误消息

c++ - 正确退出 gtkmm 应用程序

r - 从字符串中删除重复单词的最短方法

2个不同输入的JavaScript非常简单的表单验证