我的输出显示不正确
如果我没有正确格式化我的问题,我表示歉意。我是这个网站的新手,也是编程新手。我的输出显示不正确
我目前正在进行一项C作业,我相信我已经完成了大部分代码,但有一些调整我似乎无法弄清楚。我会很感激任何反馈。这里是我的代码
#include <stdio.h>
#include <stdlib.h>
#define SENTINAL -1
double sumOfScores = 0;
double examScore = 0;
double sumOfExams = 0;
double average = 0;
double calculateAverage();
double main(void)
{
int i;
for (i = 1; i <= 4; ++i)
{
calculateAverage();
}
return 0;
}
double calculateAverage()
{
printf("Enter %d to terminate program. \n", SENTINAL);
while(examScore != SENTINAL)
{
printf("Enter test score: \n");
scanf("%lf", &examScore);
sumOfScores += examScore;
sumOfExams++;
average = sumOfScores/sumOfExams;
}
printf("The average of the test scores entered thus far is %.2lf \n\n", average);
return 0;
}
这里是我的输出
Enter -1 to terminate program.
Enter test score:
99
Enter test score:
98
Enter test score:
97
Enter test score:
96
Enter test score:
-1
The average of the test scores entered thus far is 77.80
Enter -1 to terminate program.
The average of the test scores entered thus far is 77.80
Enter -1 to terminate program.
The average of the test scores entered thus far is 77.80
Enter -1 to terminate program.
The average of the test scores entered thus far is 77.80
这是我想它看起来像
Enter -1 to terminate program.
Enter test score:
99
Enter test score:
98
Enter test score:
97
Enter test score:
96
Enter test score:
-1
The average of the test scores entered thus far is 77.80
Enter -1 to terminate program.
Enter test score:
95
Enter test score:
94
Enter test score:
93
Enter test score:
92
Enter test score:
-1
The average of the test scores entered thus far is (avg goes here)
我并没有包括在额外的两组号码是什么我想要的输出,但我希望能够用四组数字来做到这一点。只要我输入(-1)来终止第一组数字,它就会自动将我剩下的3组数据的平均值抛出,然后我甚至可以输入我想输入的数字。另外,为什么当它应该在90年代上涨时,它为我提供了第一套价值77.8的平均值?
我会推荐使用局部变量而不是全局变量。也就是说,将这些行:
double sumOfScores = 0;
double examScore = 0;
double sumOfExams = 0;
double average = 0;
这里:
double calculateAverage()
{
double sumOfScores = 0;
double examScore = 0;
double sumOfExams = 0;
double average = 0;
// ...
这将导致变量每个函数开始,而不是从上一次离开垃圾时间被重置为0功能运行。
我认为你得到错误的平均值的原因是你包括-1
作为测试分数之一。您读取该值,然后将其添加到平均值,然后检查值是否为-1
。
printf("Enter test score: \n");
scanf("%lf", &examScore);
// Is examScore equal to -1 here? It might be.
// Don't add it to sumOfScores without checking!
sumOfScores += examScore;
sumOfExams++;
average = sumOfScores/sumOfExams;
您可能需要测试是否值-1
您重新计算之前平均值,或者您需要调整您的循环使得examScore != SENTINAL
检查阅读并重新计算平均值之间进行。
另外,严格来说,循环仍在运行时不需要进行所有的平均计算。您可以保存average = sumOfScores/sumOfExams;
行,直到循环结束。只是一个想法。
正如Paul R所说,您的main
函数也有不正确的函数原型。可以找到main
函数的有效原型here
谢谢你的帮助 – lopezgera92
@ lopezgera92没问题!如果您的问题已解决,请务必将答案标记为“已接受”。 – bytesized
在“终止”calculateAverage函数后,“examScore”的值是多少?解决方法是不使用全局变量。 –
谢谢@JoachimPileborg快速回复。我按照你的说法(以及另一个用户说的)来做,并解决了其中一个问题。但是我得到的“平均值”的价值仍然不正确。 – lopezgera92
'双主(void)'???从'void main()'做一个改变'我想...... –