| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 528 人关注过本帖
标题:[求助]看看这个程序为什么会发生这种意外?
只看楼主 加入收藏
bluesky3810
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-9-17
收藏
 问题点数:0 回复次数:3 
[求助]看看这个程序为什么会发生这种意外?
为什么输入非数字时没有按设想的提示"please continue,just type in another data,make sure what you entered is a number between 0~100",而是提示"sorry,what you've just entered exceed the right range of score,please enter a new score between 0~100!",而且在死循环的过程中提示输入SCORE 1时我没有任何输入信息它都会自动执行后续的printf()语句.(请注意:图2的每一个SCORE 1的冒号后面都是空的,没有进行任何输入)
如果说在运行的时候它是先把非数字输入转换为整型然后再参与运算,那为什么当输入大于100的数字时,没有陷入死循环,而输入非数字时会陷入死循环呢,而且没有任何后续输入都能自行无穷循环?该如何解决这个问题,如何达到设想的良好交互的目的?

程序及运行结果如下:


/*program to calculate the average of a set of grades and count the number of failing test grades */
#include <stdio.h>
main (void)
{
int grades,sum=0,grade_counter=1,failures=0,excellent=0;
float average;
char end_flag;
printf ("please enter the scores one by one!\n");

do
{
printf ("score %i: ",grade_counter);
scanf ("%i",&grades);
if (grades>=0 && grades<=100)
{
printf ("%i\n",grades);
sum=sum+grades;
grade_counter++;
if (grades<75)
failures++;
else
excellent++;
}

else if (grades<0 || grades>100)
printf ("\nsorry,what you've just entered exceed the right range of score,please enter a new score between 0~100!\n\n");
else
{
printf ("you've just entered a non-number,do you want to end entering? (Y/N)");
scanf ("%c",&end_flag);
{
if (end_flag=='y')
break;
else
printf ("please continue,just type in another data,make sure what you entered is a number between 0~100");
}
}
}
while (end_flag != 'y');
average=(float) sum/grade_counter;
printf("The average score is: %f\n\n",average);
printf("and there are %i failures.",failures);
getch();
return 0;
}


输入数字时运行结果:


输入字母时运行结果:

[此贴子已经被作者于2007-9-30 14:56:02编辑过]

搜索更多相关主题的帖子: 意外 
2007-09-30 14:47
hitzl
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2007-8-24
收藏
得分:0 
scanf ("%i",&grades);
问题是这句,%i只能捕捉到输入的整数;如果输入字符,那么grades不能捕捉到这个字符。

因此if (grades>=0 && grades<=100)

else if (grades<0 || grades>100)
这两个if条件就包含了所有的情况,后边的else自然就不能进去了

2007-09-30 15:33
zp_0409
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-6-4
收藏
得分:0 
不用考虑那么复杂吧,
if和else if里面的条件是互补的
就相当于一个 if else
后面的那个else根本没有用

2007-09-30 19:15
bluesky3810
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-9-17
收藏
得分:0 
以下是引用hitzl在2007-9-30 15:33:09的发言:
scanf ("%i",&grades);
问题是这句,%i只能捕捉到输入的整数;如果输入字符,那么grades不能捕捉到这个字符。

因此if (grades>=0 && grades<=100)

else if (grades<0 || grades>100)
这两个if条件就包含了所有的情况,后边的else自然就不能进去了

grades 不能捕捉到非数字字符,那它也不能乱来啊,难道它能自己创造一个执行的方式,给自己开辟一条出路不成,?怎么就变成死循环了呢?而且还是我没有提到的执行路径,那也太恐怖了吧?

2007-09-30 19:39
快速回复:[求助]看看这个程序为什么会发生这种意外?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013757 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved