这个程序为什么输入数字就是正常的,但输入一个字符就会陷入死循环!望高手指点!!

原程序如下:

#include <stdio.h>
int menu_select();

int main()
{
//菜单循环
while (1)
{
switch (menu_select())
{
case 1:
printf("Find\n");
break;
case 2:
printf("Graph\n");
break;
case 3:
printf("Goodbye!\n");
return 0;
default:
printf("Your input is illegal!\n");
}
}

//the end
return 0;
}

int menu_select()
{

int cn;
//输出菜单
printf("1.Find\n");
printf("2.Graph\n");
printf("3.Goodbye!\n");
printf("Enter your chice: ");

scanf("%d", &cn);

return cn;
}

第1个回答  2008-10-10
在scanf("%d",&cn);的后面加上fflush(stdin);来清空输入缓存。否则每次scanf都会失败的。你没有判断scanf的返回值,如果判断了你会发现scanf每次都返回0,这是失败的。因为类型不匹配。

因为scanf返回0,因此cn的值是堆栈中的随机值,所以很难等于3.

-------------------------
谁说fflush不是C标准来的?它的实现的确根据库实现决定的。但在WINDOWS下,If the stream is open for input, fflush clears the contents of the buffer.
第2个回答  2008-10-10
fflush(stdin);
scanf("%d", &cn);

在你的scanf前加一句,清空输入流缓存

因为scanf遇到格式不匹配的字符,它就不从输入流中取走那个字符,那个字符一直存在流中,第二次循环回来它还读那个字符,还是出错,还不取走,这样就死循环了,清空流就没事了。
第3个回答  2008-10-09
建议用rewind或做如下改,已测试通过
http://blog.163.com/anby1314125@126/blog/static/288754042008717102648440/
c语言中fflush(stdin)作用(转)

#include <stdio.h>
#include <limits.h>
int menu_select();

int main()
{
//菜单循环
while (1)
{
switch (menu_select())
{
case 1:
printf("Find\n");
break;
case 2:
printf("Graph\n");
break;
case 3:
printf("Goodbye!\n");
return 0;
default:
printf("Your input is illegal!\n");
}
}

//the end
return 0;
}

int menu_select()
{

int cn;
//输出菜单
printf("1.Find\n");
printf("2.Graph\n");
printf("3.Goodbye!\n");
printf("Enter your chice: ");

scanf("%d", &cn);
//rewind(stdin);

if ( feof(stdin) || ferror(stdin) )
return 0;
while ( (cn = getchar()) != '\n' && cn != EOF );
return cn;
}本回答被提问者采纳
第4个回答  2008-10-10
#include <stdio.h>
int menu_select();

int main()
{
//²Ëµ¥Ñ­»·
while (1)
{
switch (menu_select())
{
case 1:
printf("Find\n");
break;
case 2:
printf("Graph\n");
break;
case 3:
printf("Goodbye!\n");
return 0;
default:
printf("Your input is illegal!\n");
return -1;
}
}

//the end
return 0;
}

int menu_select()
{

int cn;
//Êä³ö²Ëµ¥
printf("1.Find\n");
printf("2.Graph\n");
printf("3.Goodbye!\n");
printf("Enter your chice: ");

scanf("%d", &cn);

return cn;
}
第5个回答  2008-10-10
printf("Your input is illegal!\n");
在这一句后加一个getchar();就可以了。

这个程序为什么输入数字就是正常的,但输入一个字符就会陷入死循环!望...
在scanf("%d",&cn);的后面加上fflush(stdin);来清空输入缓存。否则每次scanf都会失败的。你没有判断scanf的返回值,如果判断了你会发现scanf每次都返回0,这是失败的。因为类型不匹配。因为scanf返回0,因此cn的值是堆栈中的随机值,所以很难等于3.--- 谁说fflush不是C标准来的?它的实现的确根...

...后输入数字循环正常,但输入字母就会陷入死循环呢?求解!
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入.intenter=0;\/\/enter为整形数据在你输入字母按回车时时,cin会认为enter没有输入(非法输入),不会读取缓冲器的字母;等下次再读时,发现缓冲区有数据进行读取,因为仍是字符型...

我运行c程序后输入数字没有执行程序,但编译的时候没有错而且输入数字后...
说明你的程序可能出现死循环了。强行关闭当前界面然后再次进入tc环境就可以了。你可以单步调试一下,看看问题出在哪里了。或者把代码发上来。

为什这段代码输入数字正常,输入字符就一直刷屏死循环了?
再加个default,不是1-4的都抛弃 就不会挂了。还有个问题,没发现结束条件

这个C语言程序输入字母会出现死循环,为什么?怎么办?
输入数据后,判断一下scanf函数的返回状态,返回0则读取失败。失败的原因有很多可能,比如你的这道例子,指定输入数字,但是却输入了字符,就会返回0,而且scanf不会有动作。由于num没有初始化,所以它是一个垃圾值,这就是死循环的原因。另外,如果想要输入指定字符退出的话,在多加一个判断即可。

让一个程序无限循环,但是当你输入一个字符时就结束循环的语句
先把思路告诉你,写一个循环,不断接受用户输入,只要用户输入6就退出循环。我就简单的写一下,具体的还得根据你的整个程序的要求来。include <stdio.h>void main(){ while (getchar() != '6') { }} 希望能帮到你,谢谢,满意的话就采纳吧 ...

...代码为什么会出现死循环?错在哪里?希望高手指点。
第一个循环,i=N的时候数组越界了。数组范围只能是a[0][0]~a[9][9]。至于死循环,只能说有可能编译器会生成死循环的代码(gcc环境下并不陷入死循环)。因为i,j的声明虽然在a[N][N]之前,但实际内存上可能位于a数组之后。因此在越界访问数组并赋值时,有可能将i或j重新赋值,导致循环无法跳出...

while语句嵌套switch语句输入点就死循环了
因为你的cin语句在第一次输入字符的时候,输入非法,所以在第二次进入循环的时候cin语句失效!此时执行完cout<<"你的输入为:"这一句后跳过cin语句而去执行swich语句 原因是程序的输入都建有一个缓冲区,即输入缓冲区。一次输入过程是这样的,当一次键盘输入结束的时候会将输入数据存储到输入缓冲区,而...

...c编了一个程序,输入数字后按回车显示结果出来,但再随便按一个就退 ...
这样就可以了。因为你原来的程序在输出结果后有一个 getch,这个库函数在这里暂停程序并等待键盘录入,一旦按下任意键,该函数完成而执行 return 0,中断函数并退出程序。改成这样后是在一个封闭的while死循环里,执行输出后将跳至while(1)的下一行重新开始循环并显示信息输入数值。这和你的系统没有关系...

高手看一下这个VB程序有什么问题导致死循环?
这是一个死循环。首先我们来看(1)当t < tMin 或者h \/ (p - t) > M 时,进入第二个if 语句,(2)当a < aMax 时又进入第个if语句,再做一个简单的计算(a = a + aDelta)后,就执行了一个转移语句:GoTo line2,那就是这一段的头。那么,再次执行这一段时,我们看到a、p、t...

相似回答
大家正在搜