2015-10-28 63 views
-3

所以在這個任務中,我需要請求評委分數並計算平均值。沒有計算部分,但我已經完成了所有得分功能。一切看起來不錯,它編譯,但它測試時從來沒有輸出第一個cout,它給了我第一個cout一個斷點,我不知道爲什麼。如果重要的話,使用Xcode。此外,我應該使用引用傳遞還是「返回score1」?達到這個目的?C++函數錯誤

下面的代碼:

#include <iostream> 

using namespace std; 

void getJudgeData(double&); 

int main() 
{ 
    double score1, score2, score3, score4, score5; 

    getJudgeData(score1); 
    getJudgeData(score2); 
    getJudgeData(score3); 
    getJudgeData(score4); 
    getJudgeData(score5); 

return 0; 
} 

void getJudgeData(double& score) 
{ 
    cout << "Submit your score: "; 
    cin >> score; 

    while (score < 0.0 || score > 10.0) 
    { 
     cout << "Please re-enter a score between 0 - 10" << endl; 
     cin >> score; 
    } 
} 
+3

爲什麼你有五個功能完全相同的東西? – Sebacote

+0

'return score1;'但你在哪裏存儲返回的值? – CrakC

+0

請學會使用數組。如果不是法官,而是對1000人進行了民意測驗。你會爲每個完全相同的人創建1000個不同的功能? – PaulMcKenzie

回答

2

你沒有實際閱讀從功能什麼。

建議的替代:

double getJudgeData() 
{ 
    double score 
    cout << "Submit your score:"; 
    cin >> score; 

    while (score < 0.0 || score > 10.0) 
    { 
     cout << "Please re-enter a score between 0 - 10" << endl; 
     cin >> score; 
    } 
    return score; 
} 

int main() 
{ 
    double score1, score2, score3, score4, score5; 
    double highest, lowest; 

    score1 = getJudgeData(); 
    score2 = getJudgeData(); 
    ... 
1

我能看到的輸出與G ++編譯時。您可以嘗試的一件事是在您的cout之後使用沖水(即cout < <「提交您的分數:」< <沖水;)。如果這不起作用,我最好的猜測是你的輸出被過濾或者你沒有在正確的視圖中查找輸出。檢查您在調試器面板中選擇了「全部輸出」。

哦,關於你的問題的第二部分,你傳遞給函數的double值是有價值的。當paulsm4突出顯示時,您可以用局部變量替換它們並返回。如果你想通過引用傳遞它們,你必須使用運營商的地址的:

double getJudgeData(double& score); 
+0

是的,它在cpp.sh中適用於我,但不適用於Xcode。它給了我這個「(lldb)」 – HOAX

1

我應該使用通過引用傳遞?

在這段代碼中,我認爲你會更好地使用傳遞引用。

這些調用與您的聲明不匹配。

getJudgeData1(score1); 
getJudgeData2(score2); 
getJudgeData3(score3); 
... 

你的聲明需要在正式的參數的參考,如:

// ------------------------v 
double getJudgeData1(double& score1); 
double getJudgeData2(double& score2); 
double getJudgeData3(double& score3); 
... 

現在,您不再需要返回一個值:如果你能

void getJudgeData1(double& score1); 
void getJudgeData2(double& score2); 
void getJudgeData3(double& score3); 
... 

而且回想一下形式參數和實際參數的區別,你只需要一個getJudgeData(...)函數。

祝你好運

+0

我編輯了原文。所以對於第一個函數,我用score1調用它,然後發送它。但是,我使用score作爲雙精度,用&符號,它將得分返回並用該值替換score1。那是對的嗎? – HOAX

+0

@HOAX - 除非你正在讀取和寫入函數內部的變量,否則絕對不需要*「通過引用傳遞」。在這種情況下,你不是。你只是想獲得價值。所以最簡單/最乾淨/最有效的方法是處理你的函數* AS *函數...並簡單地返回「double」。回答你的問題:是的,「迴歸分數1」達到這個目的。 – paulsm4

0

你應該改變兩件事。

  1. 更改函數聲明並使用引用傳遞。 double getJudgeData1(double & score1)
  2. 你應該std :: cout輸出到控制檯。 cout<<score1<<score2;
+0

我編輯了原文。所以對於第一個函數,我用score1調用它,然後發送它。但是,我使用score作爲雙精度,用&符號,它將得分返回並用該值替換score1。那是對的嗎? – HOAX

+0

是的,這是正確的變化。如果你只想輸出這些值給控制檯,在int main()函數中使用std :: cout。但是如果你想用這些值來計算某些東西,你也可以這樣做。通過參考主要反映功能內發生的任何事情。在你的情況下getJudgeData1()。 –