while循环问题
int main(){
int n,status;
printf("请输入一个1~7之间的整数(输入0退出程序):");
status = scanf("%d",&n);
while(1 != status)
{
printf("输入不合法!请重新输入:");
status = scanf("%d",&n);
}
loop1:switch(n)
{
case 1:printf("Monday\n");break;
case 2:printf("Tuesday\n");break;
case 3:printf("Wensday\n");break;
case 4:printf("Thursday\n");break;
case 5:printf("Friday\n");break;
case 6:printf("Saturday\n");break;
case 7:printf("Sunday\n");break;
default:
printf("输入的数字不在1~7之间!请重新输入(输入0退出程序):");
scanf("%d",&n);
goto loop1;
if(0 == n)
{
break;
}
}
return 0;
}
while循环的想法是,如果输入的是非整型数据的话就重新输入。但是我输入一个字母的话while就陷入一个无限循环,不停的执行while里的printf()函数,而且while里的scanf()函数也不会执行。
但是如果我修改一下代码:
status = scanf("%d",&n);
while(1 == status)
{
status = scanf("%d",&n);
}
在这里面如果我输入的是一个整型的数据,程序可以进入while而且还会执行while里的scanf()函数。如果我输入一个非整型数据,while不执行。
这是为什么呢?有没有大手解释一下原因 你调试一下不就知道了吗?
能写这么长的程序,你不要告诉我你不会调试
http://bbs.fishc.com/forum.php?mod=viewthread&tid=67391&extra=page%3D1%26filter%3Dtypeid%26typeid%3D583
#include <stdio.h>
int main()
{
int n, status;
printf("请输入一个1~7之间的整数(输入0退出程序):");
status = scanf("%d", &n);
while(1 != status)
{
printf("输入不合法!请重新输入:");
int c;
while(((c = getchar()) != '\n') && (c != EOF)); // 清空 stdin
status = scanf("%d", &n);
}
loop1:
switch(n)
{
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wensday\n"); break;
case 4:printf("Thursday\n"); break;
case 5:printf("Friday\n"); break;
case 6:printf("Saturday\n"); break;
case 7:printf("Sunday\n"); break;
default:
printf("输入的数字不在1~7之间!请重新输入(输入0退出程序):");
scanf("%d", &n);
goto loop1;
if(0 == n)
{
break;
}
}
return 0;
}
人造人 发表于 2016-11-14 19:55
你调试一下不就知道了吗?
能写这么长的程序,你不要告诉我你不会调试
http://bbs.fishc.com/forum.php?m ...
我调试了,但是没有发现出问题的原因。刚才查了一下书,才知道如果scanf()没有读取成功,值会一直留在输入队列里。所以要把错误的输入剔除出去。 forbear 发表于 2016-11-14 20:06
我调试了,但是没有发现出问题的原因。刚才查了一下书,才知道如果scanf()没有读取成功,值会一直留在输 ...
一定要学会调试哦,程序应该是调试出来的
页:
[1]