2011-04-25 89 views
0
int main() 
{ 
    int score; 
    string scoreLetter; 
    char A, B, C, D, F; 

    cout<<"Enter the grade: "; 
    cin>> score; 

    void letterGrade (int score); 
    void gradeFinal (int score); 

    cout<<"The letter grade is "<< scoreLetter<<"."; 
} 

void letterGrade (int score) 
{ 
    if (score >= 90) { 
     string scoreLetter = 'A' 
    } else if (score >= 80) { 
     scoreLetter = 'B' 
    } else if (score >= 70) 

- 編譯時,出現line scoreLetter ='A'等錯誤。這是什麼問題?錯誤狀態'scoreLetter'未定義。我是否需要在函數中定義scoreLetter而不是主函數?字符串定義問題

+0

你確實意識到你的部分代碼丟失了吧? – 2011-04-25 16:13:11

+0

如果你指的是我的返回0;不,我直到現在才意識到這一點。然而,我只發佈了看起來是這個問題的代碼片段... – Mike 2011-04-25 16:15:37

回答

0

你會想要返回你的函數確定scoreLetter應該是什麼值,並在main有一條線如scoreLetter = letterGrade(score);。你不能從另一個函數設置局部變量,除非調用者通過引用將它們傳遞給你,這在這裏沒有發生(並且在大多數情況下,不應該像那樣被濫用)。

除此之外,它看起來像你混合聲明和調用。 void letterGrade (int score);實際上不會調用letterGrade;它只是說有 a letterGrade函數,它接受一個int,我們將其稱爲「分數」。 (score只有一個名稱是原型的一部分;它與你的score變量沒有關係。)所以你可能會發現,如果你設法讓你的代碼編譯,它會做一些與你完全不同的事情期待它做到。

要調用某個函數,您需要執行類似letterGrade(score);的操作,或者如果您遵循我的第一個建議scoreLetter = letterGrade(score);

string letterGrade (int score); 
// void gradeFinal (int score); // not used in this snippet 

int main() 
{ 
    int score; 
    string scoreLetter; 
    char A, B, C, D, F; 

    cout<<"Enter the grade: "; 
    cin>> score; 

    scoreLetter = letterGrade(score); 

    cout<<"The letter grade is "<< scoreLetter<<"."; 
} 

string letterGrade (int score) 
{ 
    string grade; 
    if (score >= 90) { 
     grade = "A"; 
    } else if (score >= 80) { 
     grade = "B"; 
    } else if (score >= 70) 

    ... 

    return grade; 
} 
0

你的代碼在那裏被切斷了,但是我認爲從可用的東西中你沒有正確地調用函數。

你也應該試着更具體地說你正在談論的是什麼語言,也就是說我相信在這種情況下。

正確調用函數將是:

letterGrade(score);

是的,你需要在全局範圍內定義字符串變量,所以只需將其移出主體並在其上方即可。

string scoreLetter; 
    int main() 
{ 
    int score; 
    char A, B, C, D, F; 

    cout<<"Enter the grade: "; 
    cin>> score; 

    letterGrade (score); 
    gradeFinal (score); 

    cout<<"The letter grade is "<< scoreLetter<<"."; 
} 

void letterGrade (int score) 
{ 
    if (score >= 90) { 
     scoreLetter = "A" 
    } else if (score >= 80) { 
     scoreLetter = "B" 
    } else if (score >= 70) 
+0

嗯....你實際上是推薦全局變量? – cHao 2011-04-25 16:26:30

+0

這將是獲得代碼編譯的快速解決方法。即使我根本不使用c,我要做的就是讓函數返回一個字符串,即void letterGrade - > string letterGrade,並通過返回「A」替換scoreLetter =「A」等... – Lennert 2011-04-25 16:31:53

+1

它是C++ - C沒有'cin'和'cout'。 – cHao 2011-04-25 16:33:51

1

C/C++中的單引號用於定義字符,而不是字符串。改用雙引號。 string scoreLetter = "A"。如果您正在嘗試使用std::string,則還需要包含標題:#include <string>using std::string