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

超级新手求助。。关于GOTO的问题。。。也许不是GOTO的问题(代码很短很短的)

发布于 2010-05-07 11:12, 404 次点击

程序代码:
{
agn:    int a;
           cout<<"input a number:";
           cin>>a;
           if (a<1||a>3) {cout<<"Error Occured,let's start again.\n";goto agn;}
           switch (a){。。。省略 }
}

编译通过并且可以运行,我用的是geany在g++.real (Ubuntu 4.3.2-1ubuntu12) 4.3.2下编译的

情况如下
当输入数字(稍微小点)的时候,还可以正确的显示Error Occured,let's start again。然后等待重新输入
但是当我输入字母或者数字很大,比如大于2222222222(10个2)的时候就会出现
input a number:Error Occourd,let's start again
input a number:Error Occourd,let's start again
input a number:Error Occourd,let's start again
input a number:Error Occourd,let's start again。。。。。。。一直往下无限循环的显示。除非强制停止。

求高人帮助,我是超级菜鸟,想不通
为什么输入一个简单的字母就不行呢,不是说字符会强制变换成ASCII妈妈?我输入a,最多也就是97,为什么会和输入一个很大的数字出现的情况一样?
为什么会出现agn无限循环的情况?
当回到agn循环的时候,不是要等待输入重新赋值给a吗,为什么直接就能跳到Error Occourd,let's start again那里执行呢?
请说的相信一点。谢谢了。。
第一次注册发帖。没有多少分。。不好意思了

[ 本帖最后由 dmmc 于 2010-5-7 11:26 编辑 ]
4 回复
#2
2010-05-07 12:50
这貌似就是一个bug,和我问的那个问题一样的性质。我个人理解因为你输入太大的数222222222222222222越界,已经超过了int的最大接收范围,才产生溢出错误。导致死循环。
#3
2010-05-07 13:04
以下是引用刚开始吧在2010-5-7 12:50:28的发言:

这貌似就是一个bug,和我问的那个问题一样的性质。我个人理解因为你输入太大的数222222222222222222越界,已经超过了int的最大接收范围,才产生溢出错误。导致死循环。
恩,也许溢出导致死循环,死循环应该是随机出现的吧,为什么每次死循环都是把cin这句话给跳过去了呢?
还有啊,为什么a这个ASCII码65也会越界呢??
谢谢啦``
#4
2010-05-07 13:05
不是说每次遇到cin都会停下来等待外部输入吗?
#5
2010-05-07 13:11
回复 4楼 dmmc
呵呵,哥们我遇见的问题和你一样。加入你的变量要是char类型的,你试试输入10个字符,是不是也输出十遍之后才让你cin可以使用。这就是说明,我们把输入的字符放到了一个缓冲区里面,等里面的字符什么时候都输出光了,才可以继续执行你的cin。要是int类型,它就永远无法执行cin。因为他在缓冲区的值是不变的(我也不知道为什么)。所以永远不执行cin。
1