iptton 发表于 2006-4-23 03:13

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”

powerwind 发表于 2006-4-23 10:00

那不是1/2的问题,是因为输入非法float.你输0.5就不会了

iptton 发表于 2006-4-23 11:18

那就是没有办法可以验证输入 的正确性??

powerwind 发表于 2006-4-23 11:48

不是没办法,是挺麻烦的
一般做法可能是接收字符或字符串,然后再作处理

海上飞洪 发表于 2006-4-23 12:17

输入任何一个非数字的字符,都会不停出现E

gyCai 发表于 2006-4-24 18:47

为什么会不停地出现E,而不只是出现一次?

宁风 发表于 2006-5-1 17:42

因为你有了while(scanf("%f",&mark),mark<=100&&mark>=0)
所以你输入E的时候一直都满足mark<=100&&mark>=0的条件,永远进入死循环

宁风 发表于 2006-5-1 17:46

而且实数型数据是不能跟字符数据进行转换
所以你定义mark的时候必须定义为整型

gyCai 发表于 2006-5-1 18:42

原帖由 宁风 于 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 编辑 ]

xyqguo 发表于 2006-5-1 20:21

。。。。。。。。。。。。。
为什么没人帮我做试题啊

iptton 发表于 2006-5-5 23:04

解决了,应该这样:
#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]
查看完整版本: C语言问题