C语言,我想保留for语句该怎么做?

来源:百度知道 编辑:UC知道 时间:2024/07/02 16:37:14
#include "stdio.h"
void main()
{
int i,a;
for(i=1;i!=0;i++)
{
printf("input a number:\n");
scanf("%d",&a);
switch(a)
{
case 0:printf("0");break;
case 1:printf("1");break;
default:printf("end");
}
}
}
当我输入的不是整数(比如字母)时,就一直循环个不停
我希望当我输入的是非法数据时,会打印出"输入错误!"的提示!
你们的回答真详细,用scanf()的返回值判断还不错.
如果用char的话,似乎只能选择0到9,要是我的条件多于十个就不行了.

这段代码本来就是死循环,因为i从1开始循环,始终是大于0的,除非发生溢出

关于你的问题,建议把你要输入的数的类型定义成字符型,这样可以利用ascii码进行判断,判断完以后再利用ascii转换成int型。不过这样比较麻烦。

另外,scanf()函数是由返回值的,如果你输入的数跟类型不匹配,返回的是0,你可以通过判断返回值得方法来确认输入的是不是整形数据
参照下面的程序:
void main()
{
int i;
int b;

i = scanf("%d",&b);
if(i){
printf("%d",b);
}
else{
printf("error");
}
getch();
}

还有,你的switch语句中的default没有break;这样也可能是死循环的原因

把default:printf("end"); 改成 default:break;

那你的需要进行错误判断
.....
char a;
printf("input a number:\n");
scanf("%c",&a);
if (a <= '0' && a>= '9')
printf("Input Error!\n");

switch(a)
{
case '0':printf("0");break;
case '1':printf("1");break;
default:printf("end");

}
...

#include<stdio.h>