编程原理和实践使用C++while-loop演练。找不到退出循环的方法

Programming Principles and Practice using C++ while-loop drill. Can't find a way to exit the loop

本文关键字:找不到 演练 退出 循环 方法 C++while-loop 编程      更新时间:2023-10-16

我正在阅读Bjarne Stroustrup的《编程:使用c++的原理和实践》,我有一个练习,告诉我写一个由while循环组成的程序,(每次循环)读取两个int型,然后打印它们,当输入"|"时它应该退出。我已经编写了程序(我确信有更简单的方法来编写它,但我有过度复杂化的"天赋"),但我找不到退出循环的方法。下面是代码:

#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的方法,但我没有从那里理解任何东西。最简单的解决方案就是最好的。

cin >> 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;
    }
}

两个变化:

  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;
    }