【问题标题】:Programming Principles and Practice using C++ while-loop drill. Can't find a way to exit the loop使用 C++ while-loop 演练的编程原理和实践。找不到退出循环的方法
【发布时间】:2016-01-18 02:49:38
【问题描述】:

我正在阅读 Bjarne Stroustrup 的“编程:使用 C++ 的原理和实践”,并且我有一个练习,告诉我编写一个由 while 循环组成的程序,该循环(每次围绕循环)读入两个整数,然后打印它们,当输入“|”时它应该退出。我已经编写了程序(我确信有一种更简单的方法来编写它,但我有把事情复杂化的“礼物”) ,但我找不到退出循环的方法。代码如下:

#include <iostream>
#include <vector>

int main()
{

    std::vector<int> answers;
    int answer;
    int intCounter=0;

    while(answers.size()<=2  )
    {

        if(answer=='|')
        {
            return 0;
        }
        std::cin>>answer;
        answers.push_back(answer);
        ++intCounter;

        if(intCounter==2)
        {
            for(int x : answers)
            {
                std::cout<<x<<'\n';
            }
            answers.clear();
            intCounter=0;
        }

    }

    return 0;
}

基本上,如果我编写一个 if 语句来检查答案是否等于“|”,编译器会认为我的意思是它的 int 值(124 或类似的值)并在我写 124 时终止循环,这很明显不是我想要的。我试图在互联网上寻找一种将 int 转换为 char 的方法,但我从那里什么都不懂。最简单的解决方案是最好的。

【问题讨论】:

  • 将输入作为std::string,如果不是|,则转换为int
  • 您在代码中有未定义的行为,因为您在初始化之前使用了answer。未初始化的局部变量具有 indeterminate 值,并且在初始化之外使用它们会导致所述未定义行为。
  • 天哪,请正确格式化您的代码! :P
  • (1) 当你写'|'时,它与"|"不同。第一个是单个字符,可以解释为字母或整数。第二个是字符串,您可以将其与另一个字符串进行比较。 (2) 另外,如果你想退出循环而不是程序,你可以使用break。使用 return 会退出 while 循环和它所在的函数,在本例中为 main,这会导致整个程序完成。

标签: c++ while-loop exit


【解决方案1】:

cin &gt;&gt; answer 将在下一个要读取的非空白字符不是数字时失败。您可以使用该行为来结束循环。

// Break inside the loop.
while( true  )
{
    std::cin>>answer;

    // If there was an error in reading, break out of the loop.
    if ( !std::cin )
       break;

    answers.push_back(answer);

    ++intCounter;

    if(intCounter==2)
    {
        for(int x : answers)
        {
            std::cout<<x<<'\n';
        }
        answers.clear();
        intCounter=0;
    }
}

【讨论】:

    【解决方案2】:

    两个变化:

    1. 如果您的任务只是打印数字,您可以使用字符串。

    2. 您甚至在输入之前检查| 的答案值。 所以

      #include<iostream>
      #include <vector>
      #include<string>
      using namespace std;
      int main(){
      
      std::vector<string> answers;
      string answer;
      int intCounter=0;
      
      while(answers.size()<=2  ){
      
      std::cin>>answer;
      //after input
      if(answer=="|"){
      return 0;
      }
      answers.push_back(answer);
      ++intCounter;
      
      if(intCounter==2){
      for(int x=0;x< answers.size();x++){
      std::cout<<answers[x]<<'\n';
      }
      answers.clear();
      intCounter=0;
      }
      }
      
      return 0;
      }
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多