for循环中的scanf问题。

#include<stdio.h>
int main()
{
int n,score,i,a=0,b=0,c=0,d=0,e=0,sum=0;
double ave;
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入%d个学生的分数,按回车结束。\n",n);
for(i=1;i<=n;i++)
{
scanf("%d",&score);
if(score<60) e++;
else if(score<70) d++;
else if(score<80) c++;
else if(score<90) b++;
else a++;
sum=sum+score;
}
ave=(double)sum/n;
printf("学生平均分数为:%.1lf\n",ave);
printf("A=%d\nB=%d\nC=%d\nD=%d\nE=%d\n",a,b,c,d,e);
return 0;
}
运行程序后输完数据要按回车才能退出循环,如果用空格会无限循环下去。为什么啊!!
在for循环中的scanf是如何判定输入数据的个数的?如果说整型不好判断,我写成字符型的为什么也是可以一直无限输下去?
for(i=1;i<=15;i++)
{
ch=getchar();
if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
word++;
else
other++;
}
输入字符的时候,输一个字符不就是一次循环么,那为什么输15个字符后循环还不退出?

是这样的,按回车键是告诉scanf输入结束了,如果你每输入一个学生的成绩按一下回车,程序就会判断一下并计算一下总成绩。如果你用空格分开,程序就会等你按下回车告诉系统你输入完了,程序才会判断。
编的不错,你是初学的吗?继续努力。多体会,C语言很有意思,如果想系统学习C语言推荐你看:[C.Primer.Plus&C..Primer.Plus第五版中文版]
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-26
你可以把程序改成这样,就不用于判断输入数据的个数了。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,score,i,a=0,b=0,c=0,d=0,e=0,sum=0;
double ave;
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入%d个学生的分数,按回车结束。\n",n);
for(i=1;i<=n;i++)
{
scanf("%d",&score);
if(score<60) e++;
else if(score<70) d++;
else if(score<80) c++;
else if(score<90) b++;
else a++;
sum=sum+score;
system("pause");
}
ave=(double)sum/n;
printf("学生平均分数为:%.1lf\n",ave);
printf("A=%d\nB=%d\nC=%d\nD=%d\nE=%d\n",a,b,c,d,e);
return 0;
}追问

、、、、、、大哥你自己运行下看看是什么

追答

你用的是vc6.0吗?你输入一个数据,程序就会暂停一次,你接着再输。

第2个回答  2011-04-01
i<3;i++);
这句不应该由分号结尾,这样的话后面的语句不会是for的一部分。

第二:case '0':printf("another\n");后面应有break。
原因是,如果k为0,这句执行之后,case '1'中的语句同样会执行。

第三:for(i=1;i<3;i++)只会循环两次,因此不会出现楼主所说的三个结果
另外,虚机团上产品团购,超级便宜
第3个回答  2011-03-25
例如你输入的学生人数是:3(空格) 然后回车
3将被读取赋值给n
而空格将会在进入for循环后被读取给score
但是空格是字符,score的类型是int,所以无法被成功读取,
空格将依然在输入缓冲中,结束被刺循环后进入下次循环将再次读取空格
如此往复就形成了死循环
第4个回答  2011-04-04
空格将会在进入for循环,之后被读取给score,但是空格是字符,score的类型是int,所以无法被成功读取,这是一个死循环!
你的问题很有考究性,很不错!!!你很强的
相似回答