首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当想要在c++中使用像|这样的字符结束循环时,会得到无限循环

当想要在c++中使用像|这样的字符结束循环时,会得到无限循环
EN

Stack Overflow用户
提问于 2016-12-19 01:59:16
回答 2查看 36关注 0票数 1

这就是代码

代码语言:javascript
代码运行次数:0
运行
复制
#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循环组成的程序,该循环(每次循环)读取两个in,然后打印它们。输入终止'|‘时退出程序。

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

EN

回答 2

Stack Overflow用户

发布于 2016-12-19 02:49:39

你的istream运算符>> as_int失败了,实际上什么也没做,所以你的循环还在继续。以字符形式输入并通过检查转换为整数,或者检查流中是否有错误。

代码语言:javascript
代码运行次数:0
运行
复制
cin>>a>>b;
if( cin.fail( ) )
    break;

istream reading after failure

另外:如果你跟踪到istream运算符,你就会看到为什么它没有阻塞,它失败了。当某些事情出错时,总是追踪……

票数 0
EN

Stack Overflow用户

发布于 2016-12-19 02:53:49

在默认情况下,当你试图读入一个无效的数据类型(例如,这里是试图将一个字符读入一个整型变量)时,std::cin (我认为所有的流)都会设置一个错误标志,这个标志会阻止其他std::cin运行,直到这个标志被清除。要休息流,请使用std::cin.clear()来重置错误标志,然后必须通过std::cin.ignore()或读取字符串缓冲区等方式从流中删除错误输入,因为它仍然在那里。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41211261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档