关于C++中cin的有关问题

关于C++中cin的问题
请问
int n;
cin>>n;

当我输入一个字符而非数字时,n 为什么会为0;如何必免输也非数字啊,谢了

------解决方案--------------------
如果给atoi输入一个非数字序列也是这样的,如果没有可以读入的数字,那就被处理成0。用户输入想限制还是比较难的,如果是win窗口程序还容易一点,控制台比较难。关键是处理好各种异常的情况,不见得非要让用户只能输入正确的字符。
------解决方案--------------------
C/C++ code

int n; 
cin>>n;
while(!cin)
{
cin.clear();
cin.sync();
cout<<"请输入数字";
cin>>n;
}

------解决方案--------------------
实际上,应该是原来的值并没有被修改。
试试以下代码:
C/C++ code
void main(void){
    int a = -1;

    scanf("%d\n", &a);
    printf("%d\n", a);
    cin >> a;
    cout<<a<<endl;
}

------解决方案--------------------
其实当输入数据类型不一致时,得到的结果不一定是0,而是随机值,这根据编译器决定。因为输入类型错误时,输入流的io_state标志置位为failbit,输入流缓冲区里的数据就不会被送到变量的内存,所以变量显示出来的就是一内存里的随机值。解决办法就是加入异常处理判断:

试一试这样:
int i, s;
cout<<"输入一整数:";
cin>>i;
s=cin.rdstate();
while(s)
{
cin.clear();
cout<<"非法输入,重新输入一整数:";
cin>>i;
s=cin.rdstate();
}
------解决方案--------------------
最好给个n初始化就行了,如:int n(0);就不会出现那种情况啦

------解决方案--------------------
C/C++ code

#include <iostream> 
using namespace std; 


int main()
{
    int n;

    while ((cin>>n).fail()) {
        cin.clear();
        cin.sync();
    }

    cout<<endl<<"n = "<<n<<endl;

    return 0;
}


-----------


a
b
d
c
@
d
123

n = 123