提示再次运行程序:修复他们是否输入了无效语句



早上!

我的问题:我在程序中声明输入 Y 表示是,输入 N 表示否。如果用户输入是、否或随机字符串,它将说这是一个无效的输入并再次询问。但是假设用户输入"是",它将输出无效语句三次。我该如何解决这个问题?

我还需要对布尔值做一些事情,因为它没有任何用处,因为如果他们说 n,我会中断循环,但没关系。

这是我的代码片段:

bool done = true;
string ans;
try {
   coeff input = readCoeffs();
   results result = equSolver(input);
   outResults(input, result);
   while (done == true) {
      cout << "Would you like to run the program again (Y to run again, N to close)? ";
      cin >> ans;
         if (ans == "Y" || ans == "y") {
            coeff input = readCoeffs();
            results result = equSolver(input);
            outResults(input, result);
         }
         else if (ans == "N" || ans == "n") break;
         else cout << "Invalid input. n";
   }
}
catch (const char* msg) {
   cerr << msg << endl;
}

它应该是

while(done == false)

完成应初始化为 false,并在循环中,当它们输入 N 或 n 时将 done 设置为 true。 这在某种程度上是一个风格问题,但通常最好避免休息,除非有很好的理由。

对于无效输入问题,您正在使用

cin >> ans;

这是由空格打破的,所以在"l m n o p"中将使程序说两次"无效输入",然后退出。 如果您想按行处理,请考虑使用 getline。

答案很简单。

1.

您可以使用while(true)并摆脱done标志。 或者不使用break;,翻转done标志。(顺便说一句,我认为您要么错误地命名了变量,要么翻转了布尔值......它仍然有效,但在语义上毫无意义。

阿拉伯数字。

cin只读取下一个空格,可以是空格。如果要阅读整行,则需要使用getline。所以而不是

cin >> ans;

getline(cin, ans);

编辑:我修复了使用哪个getline。现在应该是正确的。

我想出的两种可能性:

  1. 使用getline(cin, ans)
  2. 将读取的字符数限制设置如下:

char input[100]; cin.getline(input,100);

相关内容

最新更新