C语言问题
#include <stdio.h>int main(){
float mark;
while(scanf("%f",&mark),mark<=100&&mark>=0){
switch((int)mark/10){
case 9:printf("A"); break;
case 8:printf("B"); break;
case 7:printf("C"); break;
case 6:printf("D"); break;
default: printf("E");
}
}
return 0;
}
当输入 为 1/2时,会出现很奇怪的事
整个屏幕不停地出现“E” 那不是1/2的问题,是因为输入非法float.你输0.5就不会了 那就是没有办法可以验证输入 的正确性?? 不是没办法,是挺麻烦的
一般做法可能是接收字符或字符串,然后再作处理 输入任何一个非数字的字符,都会不停出现E 为什么会不停地出现E,而不只是出现一次? 因为你有了while(scanf("%f",&mark),mark<=100&&mark>=0)
所以你输入E的时候一直都满足mark<=100&&mark>=0的条件,永远进入死循环 而且实数型数据是不能跟字符数据进行转换
所以你定义mark的时候必须定义为整型 原帖由 宁风 于 2006-5-1 17:42 发表
因为你有了while(scanf("%f",&mark),mark<=100&&mark>=0)
所以你输入E的时候一直都满足mark<=100&&mark>=0的条件,永远进入死循环
不对,照您这么说,我输入一个90,那岂不是会不断出现A?不知道您有没有发现,当你第一个数就输入一个非法字符时,并没有出现E,只有您输入类似1/2这样的冬冬时,才会出现这种一直prE的情况。
[ 本帖最后由 gyCai 于 2006-5-1 18:56 编辑 ] 。。。。。。。。。。。。。
为什么没人帮我做试题啊 解决了,应该这样:
#include <stdio.h>
int main(){
float mark;
while((scanf("%f",&mark)) && mark<=100 && mark>=0){/*注意这里!!!!!!!!!!!!!!!!!!!!!因为scanf()输入匹配时返回1*/
switch((int)mark/10){
case 9:printf("A"); break;
case 8:printf("B"); break;
case 7:printf("C"); break;
case 6:printf("D"); break;
default: printf("E");
}
}
return 0;
}
页:
[1]