简单的代码显示荒谬的大数字......?

时间:2012-04-05 00:36:41

标签: visual-c++

之前我已经运行过这个程序并且运行正常。然后我将“if”语句添加到“set”方法中,当我运行程序时,我开始看到非常大的数字。我该怎么做才能解决这个问题,或者有人可以告诉我为什么会这样?

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();
}

4 个答案:

答案 0 :(得分:1)

两个猜测(我在C ++中的表现不是很好):

  1. 您的变量未初始化;如果if-expression没有计算为true,那么私有变量永远不会被设置为任何东西。 “大数字”只是存储在变量存储器中的随机值。
  2. 您正在使用cin读取字符串并将其指针传递给set-methods。 “大数字”实际上是指针地址(可能是一些乱码)。
  3. 编辑:实际上,忘了2; this似乎表明它应该有效。我的C ++有些生疏; - )

答案 1 :(得分: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
    }
    

    这有望解决您的问题。

答案 2 :(得分:0)

我注意到的第一件事是你的ivars没有被初始化,所以如果setter中的输入没有验证,那么你所识别的行为是预期的。

您应该创建一个默认构造函数并将两个变量初始化为0。

答案 3 :(得分:0)

定义GradeBook gb时,私有字段(studentGrade和studentID)未初始化。然后,gb.setStudentID尝试读取studentID。 studentID将是随机值。