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

关于计算机数据内存分配问题

hedaacm 发布于 2012-07-06 21:14, 525 次点击
那个大虾知道为啥输入一个汉字,一个字符比如a,或者大与2^31-1大的数,结果会是死循环啊,计算机内存分配倒底是啥样的,困惑啊。还有,我输入汉字,字符,不管是一个还是多个,都输出无数个2,OMG,到底是啥情况啊。如果有懂得更多的,欢迎多给小妹讲啊。。。。

#include<iostream.h>
#include<conio.h>
int main()
{
    int a;
    while(1)
    {
    cin>>a;
    cout<<a<<endl;
    }
  getch();  
return 0;   
}
5 回复
#2
rjsp2012-07-07 08:16
int a;
cin>>a;
只要你输入不是int的东西,那么cin就出错了

此时,你应该清空输入缓冲区的内容,清除cin的错误标识,然后才可以再次使用cin输入
#3
时光机2012-07-08 13:49
geich() 干嘛用的
#4
hedaacm2012-09-01 20:44
回复 2楼 rjsp
这样啊~~~~可是我还是觉得困惑~~~~对计算机内部机制更加好奇了
#5
hedaacm2012-09-01 20:45
回复 3楼 时光机
http://baike.baidu.com/view/751663.htm
这个问题,度娘给你答案
#6
pangding2012-09-21 21:07
以下是引用hedaacm在2012-9-1 20:44:36的发言:

这样啊~~~~可是我还是觉得困惑~~~~对计算机内部机制更加好奇了

最近论坛逛的不勤,经常错过一些有意思的问题耶。

过程大概是这样的:
cin >> a 的时候,因为知道 a 是一个 int,所以 cin 会调另外一些函数从输入流里抽取字符串,并把它转成一个 int 给 a 赋过去。
转的过程大概是这样,判断第一个字符是不是 + 或者 -,并以此确定数字的正负。之后顺次读取并查验是不是 0-9 这些数字,如果是拿来用于计算,如果不是就停止读取,把值给 a 赋好,报告读取成功,然后返回它在输入流中用了多少字符,之后把它们从输入流中抽出。没用到的字符依然留在输入流里。
如果转换的过程出错了,比如数值过大发生溢出,或者是根本就没看到数字。会抛出异常,或者在流里设置错误。出错的流如果你不主动清除错误,下次再读取会直接出错返回,以免把输入流里重要数据遗漏掉。
1