注册 登录
编程论坛 C++教室

int a=0;cin>>a;如何避免输入字符而并非和数字

guoyao333 发布于 2013-03-07 23:35, 1510 次点击
int a=0 ;
cin>>a ;

如果输入的不是字符那么a的数值将不变;

那么我怎么避免输入的是字符

怎么让输入字符时显示出“输入错误”的信息?

a必须是要输入一个数值的。
就像网游用户名不和要求的时候会无法继续进行的那样。

程序代码:
#include <iostream>
using namespace std;

int main()
{
    int a = 0;
    cin>>a;
    while(a<=0)
    {
    cout<<"error";
    cin>>a;        //此处
    }   
    system("pause");
}


上述代码中若是输入字符。则会不断显示“error”。
而不会产生第二个cin>>a的停顿。
请问这是为什么。
6 回复
#2
rjsp2013-03-08 08:23
程序代码:
#include <iostream>
#include <limits>
using namespace std;

int main()
{
    int a;
    while( !(cin>>a) )
    {
        cerr << "error\n";
        cin.clear();
        cin.ignore( numeric_limits<streamsize>::max(), '\n' );
    }
   

    return 0;
}
#3
lonmaor2013-03-08 10:21
楼上的代码如果输入数据是"11abc"的话,不会提示错误。
是否应该判断每一个字符 isdigit()?
#4
小菜B2013-03-08 11:16
因为输入时会敲下回车建,所以比如你输入p然后回车,在输入队列中就有p和回车,因为p的ascll码是1110000,所以p就被当作一个负数,从而显示error,然后又遇到cin>>a,所以输入队列中的回车就会遇上被输入到a里。由于回车不是int类型。所以相当与将空字符输进a里,但是回车还是留在输入队列中,永远跳不过去这个循环。可以使用cin.get()将输入队列中的回车丢弃。
#5
guoyao3332013-03-09 12:55
回复 4楼 小菜B
哦哦哦 了解了!
#6
guoyao3332013-03-09 12:57
回复 3楼 lonmaor
就不考虑那种砸场子的了先。。
#7
guoyao3332013-03-09 12:58
回复 2楼 rjsp
感谢!
1