我的输出显示不正确

问题描述:

如果我没有正确格式化我的问题,我表示歉意。我是这个网站的新手,也是编程新手。我的输出显示不正确

我目前正在进行一项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的平均值?

+1

在“终止”calculateAverage函数后,“examScore”的值是多少?解决方法是不使用全局变量。 –

+0

谢谢@JoachimPileborg快速回复。我按照你的说法(以及另一个用户说的)来做,并解决了其中一个问题。但是我得到的“平均值”的价值仍然不正确。 – lopezgera92

+0

'双主(void)'???从'void main()'做一个改变'我想...... –

我会推荐使用局部变量而不是全局变量。也就是说,将这些行:

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

+0

谢谢你的帮助 – lopezgera92

+0

@ lopezgera92没问题!如果您的问题已解决,请务必将答案标记为“已接受”。 – bytesized