我将一系列考试成绩传递给examAverage函数以及数组的大小。当我在for循环中printf数组内容时,它们是正确的,但是当它们被加在一起时总和是错误的。即使我在设置double sum = 0之后立即printf,它也表示sum = 2.当函数完成时,我得到一个非常大的数字。任何帮助表示赞赏。
double examAverage(int arr[], int size){
int i;
double exAvg=0;
double sum =0;
printf("Sum = %d\n", sum);
for (i = 0; i < size; ++i)
{
printf("Sum = %d\n", sum);
sum = arr[i];
}
exAvg = sum / size;
return exAvg;
}
主要
double examAverage(int arr[], int size);
printf("How many exam grades would you like to enter?\n");
scanf("%d", &examGrad);
int exams[examGrad];
printf("Enter exam grades \n");
for(int i=0; i<sizeof(exams)/sizeof(exams[0]); i++){
scanf("%d", &exams[i]);
}
double exAvg;
exAvg= examAverage(exams, examGrad);
printf("Exam average = %d", exAvg);
输出
How many exam grades to enter?
2
Enter exam grades
100
50
Sum = 2
Sum = 10
Sum = 1079574528
Exam Average = 1081159680
答案 0 :(得分:1)
请勿使用%d
打印double
;这是整数。使用%f
。存储整数和浮点数的不同方式可以解决您遇到的问题。
在编译时,您应该已经看到了关于此的警告:
format specifies type 'int' but the argument has type 'double'
答案 1 :(得分:1)
你的意思是sum += arr[i];
中的for循环中的examAverage
吗?
另外,标记为Main的代码根本不是真的有效,首先,没有examGrad
的声明,第二个顶部的函数声明是谁知道什么,第三,for循环中的sizeofs
可以被examGrad取代,%d
已被提及。
如果您询问有关简单代码的问题,只需包含所有内容,如果太多,请删除不必要的部分或确保它们在那里,否则我们不知道问题是否是缺失的代码。