2012-04-05 36 views
1

我以前運行這個程序,它工作得很好。然後我說「如果」語句的「設置」的方法,我開始當我跑的程序看到非常大的數字。我能做些什麼來解決這個問題,或者有人能夠啓發我爲什麼會發生這種情況?簡單的代碼顯示荒謬的大數字......?

class GradeBook{ 

public: 
    void setStudentID(int ID){ 

     if(10000 <= studentID && studentID <= 50000){ 

      studentID = ID; 
     } 
    } 

    int getStudentID(){ 

     return studentID; 
    } 

    void setStudentGrade(int grade){ 

     if(0 <= studentGrade && studentGrade <= 100){ 

     studentGrade = grade; 
     } 
    } 

    int getStudentGrade(){ 

     return studentGrade; 
    } 

    void displayMessage(){ 

     cout << "Student " << getStudentID() << " has a score of " << getStudentGrade() << endl; 
    } 

private: 

    int studentGrade; 
    int studentID; 
}; 

int main(){ 

    int nameOfID; 
    int nameOfGrade; 
    GradeBook gb; 

    cout << "Please enter a student ID: " << endl; 
    cin >> nameOfID; 
    gb.setStudentID(nameOfID); 
    cout << "Please enter the student's grade: " << endl; 
    cin >> nameOfGrade; 
    gb.setStudentGrade(nameOfGrade); 
    getchar(); 

    gb.displayMessage(); 
    getchar(); 
} 

回答

1
  1. 你有你的比較錯誤,你的意思。

    if(10000 >= studentID && studentID <= 50000) 
    
  2. 你不必else語句,以確保變量初始化,因此我將其更改爲:

    if(10000 >= studentID && studentID <= 50000){ 
        studentID = ID; 
    } 
    else{ 
        studentID = 0; //or whatever value you want to mean invalid 
    } 
    

    ,希望能解決您的問題。

+0

非常感謝! – Nick 2012-04-05 01:16:32

1

兩個猜測(我不是在C好++):

  1. 您的變量沒有被初始化;如果if表達式不計算爲真,則私有變量永遠不會被設置爲任何值。 「大數」只是發生在存儲變量的內存中的隨機值。
  2. 您正在閱讀與CIN並通過他們的三分球入套的方法。 「大數」實際上是指針地址(可能有些亂碼)。

編輯:其實,忘記2; this似乎表明它應該工作。我的C++有點生疏;-)

+0

OP應該會看到來自編譯器的非常翔實的警告,它也會指出這一點。 – 2012-04-05 00:42:38

+0

感謝您的幫助! – Nick 2012-04-05 01:13:21

0

我注意到的第一件事是你的ivars沒有被初始化,所以如果setters中的輸入沒有被驗證,那麼你已經確定的行爲是預期的。

你應該創建一個默認的構造函數和兩個變量初始化爲0

0

當你定義的GradeBook GB,私營領域(studentGrade和studentID)不被初始化。然後,gb.setStudentID嘗試讀取studentID。 studentID將是隨機值。