首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-04-04 
关于C++中cin的问题请问int ncinn当我输入一个字符而非数字时,n 为什么会为0;如何必免输也非数字啊,谢

关于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;}-----------abdc@d123n = 123 

热点排行