读书人

关于c++ while循环的 小疑点

发布时间: 2013-07-04 11:45:51 作者: rapoo

关于c++ while循环的 小问题
我是用了 如下的一个whlie 循环
while(i!=4)
{
......
cin>>i;
}
我如果输入的是 一个整形的数字 循环正常
可是 如果 我输入的时候 输入了一个字符串 那么 我的while 循环将变成一个 跳过cin 输入 这个语句的 无限死循环 这是为什么啊 求解决办法...
[解决办法]


while(i != 4)
{
//......
cin>>i;
if(!cin) break;
}

[解决办法]
引用:
谢谢啊 按照你的 会跳出这个循环...
可是
我是想 如果 输入的如果不对的话 重新输入...
我试过了了 if(!cin) contiune; 还是会死循环...
while(i != 4)
{
//......
cin>>i;
if(!cin) cin.clear();
}

[解决办法]
while(i != 4)
{
//......
cin>>i;
if(!cin) cin.clear();
string garbage;
cin >> garbage;
}

clear把fail位复位,允许继续从流中输入,在流中的不合法数据依然存在,把它们输入到一个字符串中。

[解决办法]
如果要把整个当前行都放弃掉重新输入,则:

while(i != 4)
{
//......
cin>>i;
if(!cin) cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}

需要:
#include <limits>
或者
把numeric_limits<streamsize>::max()换成0x7fffffff。
[解决办法]
比如这样一组输入:

abc123 456
789

cin>>i将在遇到“abc”时失败,这时需要处理,如果希望下一次读入的i是456,那就用7楼的代码,跳过一个单词再输入。如果希望下一次读入的i是789,就用8楼的方法,跳过当前行再输入。如果希望下次输入的i是123,则:
while(i != 4)
{
//......
cin>>i;
if(!cin) cin.clear();


cin.get();
}


这时cin>>i将在遇到a、b、c时各失败一次,然后读入123。
[解决办法]
cin>>i;
while(!cin){
cin.clear();//清除错误
cin.ignore(1024,'\n');
cin>>i;
}

读书人网 >C++

热点推荐