请帮我看下这段C语言代码的错误地方

来源:百度知道 编辑:UC知道 时间:2024/05/12 15:04:03
目的是,通过输入学生数,然后输入每个学生的成绩,最后计算出平均成绩; 最后问是否要继续输入,

错误:不能进行再次输入其他班级,请帮我指出程序错误的地方!谢谢
改正后可以循环即可!最好不要换其他循环函数

代码:
#include<stdio.h>
void main()
{
int n,zongren,banhao;
float sum,chengji;
char ans;
do
{
printf("请输入班级号:");
scanf("%d",&banhao);
printf("请输入总人数:");
scanf("%d",&zongren);
sum=0,n=1;
while (n<=zongren)
{
printf("输入学号%d的成绩",n);
scanf("%f",&chengji);
sum=sum+chengji;
n++;
}

sum=sum/--n;
printf("%.2f\n",sum);
printf("是否要继续:");
ans = getchar();
}while(ans == 'y'|| ans == 'Y');
}

在这句:
ans = getchar();
前面加一行
fflush(stdin);
试试,有可能是因为读取了缓冲区的内容,所以总读不到最新输入。

在ans=getchar();前面加上fflush(stdin);就行了。

因为你输入最后一个人的成绩时,最后要按一下回车,而回车键实际上是两个字符,一个是换行,一个是光标移到行开头,其中换行符被用来确认输入,而光标移到行开头这个字符仍然保留在缓冲区内,会被接下来的getchar()当成输入的字符,所以ans实际上是这个字符(ASCII码为10)。因此,我加了fflush(stdin);用来清空缓冲区。

使用以下代码可以实现你要的功能
void main()
{
int n,zongren,banhao;
float sum,chengji;
char ans[2];

do
{
printf("请输入班级号:");
scanf("%d",&banhao);
printf("请输入总人数:");
scanf("%d",&zongren);
sum=0,n=1;
while (n<=zongren)
{
printf("输入学号%d的成绩",n);
scanf("%f",&chengji);
sum=sum+chengji;
n++;
}

sum=sum/--n;
printf("%.2f\n",sum);

printf("是否要继续:");
scanf ("%s", ans);

}while(ans[0] == 'y'|| ans[0] == 'Y&