关于c++。 我判断输入是否为数字,并直到输入数字。

#include<iostream>usingnamespacestd;intmain(){intm;while(!(cin>>m)){cout<<"不是数字"<<end... #include<iostream>
using namespace std;
int main()
{
int m;
while(!(cin>>m))
{
cout << "不是数字"<<endl;
}
return 0;
}
为什么输入字母后会无限循环,应该怎么改?
这个程序错在哪里。
展开
 我来答
随机漫步的大锤子
推荐于2017-11-25 · TA获得超过815个赞
知道小有建树答主
回答量:376
采纳率:0%
帮助的人:142万
展开全部
我来给你正解:
1.首先说明:cin>>是输入流,当执行成功时,他会返回一个流对象,其实就是个引用,说白了就是指针,当失败时会返回0。这个你可以试下,打出来的是地址:
int n;
void* p = (cin>>n);
cout << p << endl;
2.while(!(cin>>m)),因为m是int型,所以只接收int型输入值,当你输入数字时,cin>>m执行成功,>>返回的是地址,地址是正值,即为ture,所以!(cin>>m)为false,不满足while循环条件,所以程序直接over。
3.反之,当你输入字母时,符合while条件进入循环,但是为啥会不断循环呢?因为,你输入不正确,cin内含的状态值ios_base被置为ios_base:: failbit,此时cin状态为错,不接受任何输入。然后就成了这种死循环了。要改的话首先重置cin状态为ios_base::goodbit,此外还要清空输入缓冲区中的错误数据。
while(!(cin>>m))
{
cin.clear();
cin.sync();
cout << "不是数字"<<endl;
}
cin.clear();是将输入流状态置为goodbit
cin.sync();是将流清空
怕你听不懂,所以啰嗦了!
chiconysun
2012-04-29 · TA获得超过2.2万个赞
知道大有可为答主
回答量:5410
采纳率:92%
帮助的人:2572万
展开全部
只能用字符或者字符串的方式输入,然后判断是否数字,是则自己手工转换为数字
错在于int型只能接受数字的输入,输入字符不是触发异常停止程序,就是这样的死循环
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
saloyun
2012-04-29 · TA获得超过342个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:362万
展开全部
#include <iostream>
#include <string>

using namespace std;

int main()
{
while (true)
{
string str;
cin >> str;
bool b_all_num = true;
for (unsigned int i = 0; i < str.size(); i++)
{
if (!(str[i] >= '0' && str[i] <= '9'))
{
b_all_num = false;
break;
}
}

if (b_all_num)
{
break;
}
}

return 0;
}

cin用的是流输入,兄弟,可以随便存的。

================================================
cin表示将输入的内容,已二进制流的方式,保存到一个地址空间去。虽然你一个int型的变量保存的是会截断,但是cin>>m是不会返回false的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式