提示再次运行程序:如果他们输入了无效的语句,则修复

时间:2014-02-13 17:22:49

标签: c++

早!

我的问题:我在程序中声明输入Y表示是,N表示否。如果用户输入yes,no或随机字符串,则表示它是无效输入并再次询问。但是说用户输入“是是是”,它将输出无效语句三次。我怎么能解决这个问题?

我还需要对布尔值做一些事情,因为它没有任何意义,因为我打破了循环,如果他们说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;
}

3 个答案:

答案 0 :(得分:1)

应该是

while(done == false)

Done应该被初始化为false,并且在你的循环中,当他们输入N或n时,将done设置为true。这有点像一个风格问题,但除非有一个非常好的理由,否则通常最好避免休息。

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

cin >> ans;

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

答案 1 :(得分:1)

答案很简单。

1。

您可以使用while(true)并删除done标记。或者不是使用break;,而是翻转done标志。 (顺便说一句,我认为你要么把这个变量命名为错误,要么你翻转了布尔值...它仍然有效,但在语义上它没有任何意义。)

2

cin只能读取下一个空格,即空格。如果您想阅读整行,则需要使用getline。而不是

cin >> ans;

使用

getline(cin, ans);

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

答案 2 :(得分:0)

我提出了两种可能性:

  1. 使用getline(cin, ans)
  2. 将限制设置为读取的字符数量如下:
  3. char input[100]; cin.getline(input,100);