【发布时间】:2013-08-22 10:47:37
【问题描述】:
这个程序应该存储输入的 3 名学生的成绩并打印平均成绩。但是,如果我要求学生 B 的平均值,它会打印学生 A 的平均值。学生 A 的平均值为 0。我似乎找不到哪里出错了。请帮忙 例如Student_A = {7,7,7},Student_B = {8,8,8}; ave(Student_B) = 7
#include<stdio.h>
int i;
char j;
int student_A[4];
int student_B[4];
int student_C[4];
float grade_input(int student[]);
float ave(int student[]);
main(){
printf("For Student A:\n");
grade_input(&student_A[4]);
printf("For Student B:\n");
grade_input(&student_B[4]);
printf("For Student C:\n");
grade_input(&student_C[4]);
do{
printf("Whose average grade do you want to see, a ,b ,c? ");
getchar();
scanf("%c", &j);
if(j=='a'){
printf("%.2f\n", ave(student_A));
}
if(j=='b'){
printf("%.2f\n", ave(student_B));
}
if(j=='c'){
printf("%.2f\n", ave(student_C));
}
}while(j=='a' || j=='b' || j=='c');
}
float grade_input(int student[]){
int i;
for(i=0; i<3; i++){
printf("Enter grade %d: ", i+1);
scanf("%d", &student[i]);
}
}
float ave(int student[]){
return (student[0] + student[1] + student[2])/3.0;
}
【问题讨论】:
-
您的问题是通过引用 4 元素数组的元素 4 进行越界访问; 请参阅下面的详细答案。这个问题根本与 scanf() 无关。 scanf 做得很好,你给它一个不好的使用指针。
-
关于在使用接受的答案后可能仍然存在的潜在输入问题:将
scanf("%c", &j);替换为scanf(" %c", &j);(额外的空格)。这将消耗任何以前的\n。