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

#include<iostream>
using namespace std;
int main()
{
int m;
while(!(cin>>m))
{
cout << "不是数字"<<endl;
}
return 0;
}
为什么输入字母后会无限循环,应该怎么改?
这个程序错在哪里。

我来给你正解:
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();是将流清空
怕你听不懂,所以啰嗦了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-29
只能用字符或者字符串的方式输入,然后判断是否数字,是则自己手工转换为数字
错在于int型只能接受数字的输入,输入字符不是触发异常停止程序,就是这样的死循环
第2个回答  2012-04-29
#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的。

c++中怎么判断输入是否是数字啊
int main(){ char a[10];double x;int flag=0;gets(a);for(int i=0;a[i]!='\\0';i++)if(!(a[i]>='0'&&a[i]<='9'||a[i]=='.')){cout<<"输入为非数字"<<endl;flag=1;break;} if(flag==0){ cout<<"输入为数字"<<endl;x=atof(a);\/\/该函数把字符串(即数组...

C++怎么判断输入的是不是一个数字
include<string> \/\/提供string类,说白了相当于一个动态数组,并且重载了[]运算符,所以可以访问下标 include <cctype> \/\/调用isdigit函数要用它,isdigit函数是判断一个字符是否是数字,是返回true,否则返回false using namespace std;bool IsDigit(string&);int main(){ string str; \/\/声明类对象 ...

C++ 如何判断输入的数据是否为整数
定义接收内容的字符串 string s,调用C++的getline方法,格式如下:getline(cin,s),getline可以接收空格,遇到换行输入结束。然后依次判断字符串中的字符,是否为数字,如果遇到一个非数字的字符,则不是整数。bool isDigit(char a) { if (a - '0' == 0 || a - '0' == 1 || a - '0'...

c++判断输入的是否为数字?
include<iostream> using namespace std;int main(){ double num;if(cin>>num)cout<<"Input correct!"<<endl;else cout<<"Input erroe!"<<endl;return 0;}

C++如何判断输入的数字还是字母
通过字符的字母和数字的ASCII递增的特点来判断。例如:\/\/参考代码如下:#include "iostream"#include "stdio.h" #include <string.h>using namespace std; int main(){char ch;cin>>ch;if(ch>='0'&&ch<='9') cout<<"该字符为数字"<<endl;else if((ch>='a'&&ch<='z')||(ch>='A...

C++编程 输入一个字符,判断该字符是否是数字,若为数字输出1,否则输出...
有两种方法,比较输入的字符是不是在整数的ascii范围,第二用一个库函数判断是isdigit

C++中怎么判断用户输入的是否是数字?是否有特殊符号?
【答案】:char ch; cout << "请输入一个字符:"; cin >> ch; if (ch >= '0' && ch <= '9') cout << ch << "是数字" << endl; else cout << ch << "不是数字" << endl;

C++ if语句判断是否非数字以及大小
void main(){ int x;char input;cout << "请输入数字:" ;cin >> input;if( !isdigit(input) ){\/\/判断是否是数字 cout << "您输入的不是符合要求的数字,请重新输入:";cin >> input;} else{ x=atof(a);\/\/该函数把字符串(即数组中的全部元素)转换成数字 } if(x<0||x>4){ co...

C++语言怎么判断输入是否数字
int main(){ int c = getchar(); if(c >= '0' && c<='9') printf("%c 是数字\\n",c); else printf("%c 是字符\\n",c);}

c++中怎么判断输入的是数字还是字母?
char c;while(1){ scanf("%c",&c); if((int)c<48 || (int)c>58) { printf("\\n您输入的是一个数字,请输入字母"); break; } else { printf("\\n您输入了字母:"); }}

相似回答