如何在c ++中停止while循环

时间:2017-08-09 14:05:56

标签: c++ while-loop

“编写一个由while循环组成的程序(每次循环)读取两个整数然后打印它们。 终止'|'时退出程序进入。“

我的尝试

#include <iostream>
#include <cstdlib>
using namespace std;



int main(){

    int firstnumber;
    int secondnumber;
    int stopnumber;


    while(stopnumber!='|'){

        cout <<"Please enter an integer, followed by another integer: \n";
        cin >> firstnumber >> secondnumber;
        cout <<"\n" <<  firstnumber <<"   "<<  secondnumber<< "    \n";

    }

return 0;
}

该程序需要2个数字并打印出来,但当我输入“|”时,它进入无限循环。当我输入'|'

时如何停止程序

由于

5 个答案:

答案 0 :(得分:1)

这就是你的循环应该是这样的:

  1. 阅读字符(std::cin::get)。
  2. 如果成功并且您的角色是停止符号,请打破循环。
  3. 如果您的角色不是数字(::isdigit),请继续循环播放。
  4. 如果您的角色是数字,请将其放回(std::cin::putback)。
  5. 读两个整数。
  6. 如果成功,则显示它们,否则,清除流(std::cin::clear)。
  7. 您必须耐心地了解getputback&amp; isdigit正在做。

    <强> [编辑] Run it

    #include <iostream>
    #include <cctype>
    
    int main()
    {
      char c;
      while ( std::cin.get( c ) && c != '|' )
      {
        if ( !std::isdigit( c ) )
          continue;
    
        std::cin.putback( c );
    
        int i, j;
        if ( std::cin >> i >> j )
          std::cout << i << ' ' << j << std::endl;
        else
          std::cin.clear();
      }
    
      return 0;
    }
    

答案 1 :(得分:0)

您的循环正在测试从未设置的stopnumber。如果您将stopnumber设置为firstnumbersecondnumber,那么也许您可以让您的逻辑工作,但实际上缺少一步。

答案 2 :(得分:0)

这取决于您是否需要在收到“|”后直接退出在退出之前,你是否先介意完成循环的其余部分......

我个人想收到'|'后直接退出所以会遵循......的基本理念。

int a,b;

while(){
  read your values a,b in
  if (a='|' || b='|'){exit()};
  print your values
}

答案 3 :(得分:0)

好的,我想我找到了答案

我试着把我的cin放在while循环中

int firstnumber;
int secondnumber;

  while (cin >> firstnumber >> secondnumber)

它有效!谢谢大家的帮助

答案 4 :(得分:0)

std :: stoi(std :: string) - 从std :: string

返回int
#include <iostream>
#include <string>

bool isNumber(std::string &str) {
    for (auto i : str) {
        if (i < '0' || i > '9') return false;
    return true;
}

int main () {
    int a, b;
    std::string s;

    while (true) {
        std::cin >> s;
        if (s == "|" || !isNumber(s)) break;
        a = std::stoi(s);

        std::cin >> s;
        if (s == "|" || !isNumber(s)) break;
        b = std::stoi(s);

        std::cout << a << " " << b << std::endl;
    }

    return 0;
}