想要使用像|这样的字符来终止它时获得无限循环在c ++中

时间:2016-12-18 17:59:16

标签: c++

所以这是代码

#include<iostream>

using namespace std;
int main(){
    int a,b;
    while(true){
        cout<<"Enter the value of a and b ";
        cin>>a>>b;
        if(a=='|'||b=='|')
            break;
        else
            cout<<"The value of a is "<<a<<"\nThe value of b is "<<b<<endl;
    }
}

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

当我输入像|的输入时它无限打印“a的值和b的值是”。这是什么原因?enter code here

2 个答案:

答案 0 :(得分:0)

您的istream运算符&gt;&gt; as_int失败了,实际上什么都没做,所以你的循环一直在继续。输入为chars并转换为带有检查的int,或者检查流是否有错误。

cin>>a>>b;
if( cin.fail( ) )
    break;

istream reading after failure

另外:如果您已经跟踪到istream运算符,您会看到它为什么没有阻塞,它已经失败了。当出现问题时总是追踪......

答案 1 :(得分:0)

默认情况下,当您尝试读取无效数据类型时(例如,尝试将char读入int变量)并且该标志将阻止时,默认情况下,

std :: cin(我认为所有流)都会设置错误标志其他std :: cin运行直到标志被清除。要休息流,使用std :: cin.clear()来重置错误标志,然后你必须通过std :: cin.ignore()或读入字符串缓冲区或其他东西来删除错误输入,流仍然在那里。