之前我已经运行过这个程序并且运行正常。然后我将“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();
}
答案 0 :(得分:1)
两个猜测(我在C ++中的表现不是很好):
编辑:实际上,忘了2; this似乎表明它应该有效。我的C ++有些生疏; - )
答案 1 :(得分:1)
你的意思是错误的。
if(10000 >= studentID && studentID <= 50000)
您没有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将是随机值。