【问题标题】:How to break out of a loop when int input fails当int输入失败时如何跳出循环
【发布时间】:2014-09-24 04:33:45
【问题描述】:

我需要编写一个程序,让你输入两个整数,然后输出这两个整数,但是如果你输入'|',它会结束程序。

这就是我所拥有的,对我来说应该可以,但不幸的是它没有。

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iomanip>
using namespace std;

int main()
{
    int var1 = 0;
    int var2 = 0;

    while(1)
    {
        cout << "Please enter two numbers.\n";
        cin >> var1;
        cin >> var2;

        if(var1 == '|')
            break;

        else
        {
            if(var2 == '|')
                break;

            else
            {
                cout << var1 << ' ' << var2 << '\n';
            }
        }       
    }
}

我确信这是我缺少的一些简单概念,但任何帮助显然都将不胜感激。

【问题讨论】:

  • 当输入以| 开头时,cin &gt;&gt; var1; 不会将任何内容读入var。您必须更改处理输入的策略。
  • 输入 2 和 | 时的输出是什么?
  • @NathanWride '请输入两个数字。 2 0 请输入两个数字。 2 0 请输入两个数字。 2 0 请输入两个数字。 2 0 请输入两个数字。 2 0 请输入两个数字。 2 0' 它不断重复它
  • @Joe 这告诉你它正在读取 0,或者没有字符,正如@R Sahu 所说。试试 Cheers 和 hth alf 的回答

标签: c++ break formatted-input


【解决方案1】:

当您读取整数时,| 之类的用户输入只会导致(静默)错误,从而将 cin 置于错误模式。

在错误模式被清除之前,进一步的输入操作将被忽略,因此您将获得无限循环。

而是使用 &lt;string&gt; 标头中的 std::getline 将用户输入读取为字符串。检查输入行是否以数字或“|”开头。如果是数字,则使用例如转换为整数std::stoi.


该语言的内置无限循环语法是for(;;)。它的实际优势是 Visual C++ 不会发出关于常量条件表达式的愚蠢警告。

【讨论】:

    【解决方案2】:

    不要使用从if(var1 == '|') 开始的所有代码,而是这样做:

    if ( !cin )
        break;
    
    cout << var1 << ' ' << var2 << '\n';
    

    当您使用&lt;&lt; 读入int 时,如果输入实际上不包含int,那么它会将cin 置于失败状态。测试!cin 会检查cin 是否处于失败状态。

    要了解更多信息,请阅读任何 C++ 书籍或参考资料。

    【讨论】:

      【解决方案3】:

      尝试将 var1 和 var2 声明为 char 类型 如果它需要 int 然后尝试

       if(var2 == 124)
      

      【讨论】:

      • 我需要将它们设置为 int 的
      • 那么就可以使用char '|'的ASCII码了比较
      【解决方案4】:

      如果您想接受数字以外的任何字符,您的 var1 和 var2 不能是整数类型。所以你必须用 char 声明任何一个字符串。

      我确定你需要这两个数字来做一些计算功能,所以将 var1 和 var2 从字符串类型转换为整数类型。

      参考这个: http://en.cppreference.com/w/cpp/string/basic_string/stol

      这个关于“如何结束程序”的问题的答案

      你可以使用

      exit(1);
      

      代码示例:

      #include <iostream>
      #include <string>
      #include <stdlib.h>
      using namespace std;
      
      int main()
      {
          string var1,var2;
          int num1,num2;
      
          cout << "Please enter two numbers.\n";
          cin>>var1;
      
          if(var1 != "|")
          {
              num1 = ::atoi(var1.c_str());
          }
          else
          {
              cout<<"Programs Terminated."<<endl;
              exit(1);
          }
      
          cin>>var2;
      
          if(var2 != "|")
          {
              num2 = ::atoi(var2.c_str());
          }
          else
          {
              cout<<"Programs Terminated."<<endl;
              exit(1);
          }
      
          cout<<"\nSum of 2 number: "<<num1+num2<<endl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 2021-01-19
        • 2015-01-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多