2016-06-09 146 views
0

如果我沒有正確格式化我的問題,我表示歉意。我是這個網站的新手,也是編程新手。我的輸出顯示不正確

我目前正在進行一項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()'做一個改變'我想...... –

回答

0

我會推薦使用局部變量而不是全局變量。也就是說,將這些行:

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