为什么变成了死循环

sunchuang 2006-03-29 12:03:30
请前辈们看一下:
#include<stdio.h>

void main()
{
float score=101;
int panduan=0;
printf("Please input score:");
scanf("%f",&score);

while(((int)score>=0)&&((int)score<=100))
{
panduan=(int)score/10;
if(panduan>=10)
{
panduan=9;
}

switch(panduan)
{
case 9: printf("A");break;
case 8: printf("B");break;
case 7: printf("C");break;
case 6: printf("D");break;
default: printf("E");

}

putchar('\n');
scanf("%f",&score);
}

printf("Input error!Please input available number!");
putchar('\n');
}
首先输入:23,输出为E。
接着输入:R, 程序陷入死循环,一直输入E
调试可以看出,在第二个输入语句中,输入R时,R并没有传到score 中.
不知问题出在哪里?
...全文
120 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiunai78 2006-03-31
  • 打赏
  • 举报
回复
while(scanf("%f", &score) != 1) rewind(stdin);什么意思啊???!!
特别是rewind(stdin);谁知道啊??回应一下!!
tczzya 2006-03-29
  • 打赏
  • 举报
回复
测试一下输入数据是否是数字类型的吧,不是就跳出……具体怎么测……我也不太清楚……
megaboy 2006-03-29
  • 打赏
  • 举报
回复
在函数scanf中,对于格式说明符"%f",象字母等字符属于错误输入,这时候score的值不被改变,scanf返回0,程序继续运行,不停下来等待输入,此外也不清除输入缓冲中的内容。每次运行while循环,都如此。

可以把while循环中的scanf("%f", &score);改为

while(scanf("%f", &score) != 1) rewind(stdin);
jixingzhong 2006-03-29
  • 打赏
  • 举报
回复
非法输入,不被接收 ...

就是这个样子的 ...
根据格式,R 不被接收,
这个输入会被作为下一个输入,

楼主你的程序是循环,
那么这个过程就一直重复,
不接收--》下一次--》还是不接收--》下一次 ....
死循环了 .....
ykzhujiang 2006-03-29
  • 打赏
  • 举报
回复
主要问题在于你输入R以后,实际上它并没有保存到score里面,所以一直在输出上一次计算的结果
ykzhujiang 2006-03-29
  • 打赏
  • 举报
回复
逻辑关系混乱
xiunai78 2006-03-29
  • 打赏
  • 举报
回复
如果楼主的score改成是INT型然后用scanf("%d",&score);
又会点呢???
hanzq0011 2006-03-29
  • 打赏
  • 举报
回复
阻塞在scanf()函数上
sunchuang 2006-03-29
  • 打赏
  • 举报
回复
感谢:megaboy(飞天御剑流之杀神一刀斩)

按你的方法可以解决这个问题。原来在C中,对于格式符,错误的输入是不被接收的,明白了,我说调试时为什么在输入错误值时,SCORE中的值还是上一次正确的值呢,原来如此!
非常感谢!

shanzhongyufu 2006-03-29
  • 打赏
  • 举报
回复
楼上的基本上都讲清除了,主要是scanf()函数与你的输入不匹配造成的,你设计的函数,只能接受数字,不能接受其他字符

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧