gpt4 book ai didi

c++ - 打印出错误的值

转载 作者:行者123 更新时间:2023-11-28 02:20:45 26 4
gpt4 key购买 nike

我正在尝试编写一个获取成绩并打印出以下内容的程序:

ID:123 姓名:John 等级:78

但我得到的是:

ID:-842150451 姓名:等级:78

由于我是 C++ 的新手,你们能帮帮我并给我一些额外的提示来使我的代码更清晰吗?

学生.h

#ifndef STUDENT_H
#define STUDENT_H
#include <iostream>
#include <string>
using namespace std;

class Student {
public:
Student(int num, string text);
int getID();
void setExamGrade(int a, int b);
int getOverallGrade();
void display();
string getName();
string name;
int id;
int exams[3];
int sum;
int average;
};

#endif

学生.cpp

#ifndef STUDENT_CPP
#define STUDENT_CPP
#include "Student.h"
#include <iostream>
#include <string>
using namespace std;

Student::Student(int num, string text)
{
num = id;
text = name;

exams[0, 1, 2] = 0;
}

int Student::getID() {
return id;
}

string Student::getName() {
return name;
}

void Student::setExamGrade(int a, int b) {
exams[a] = b;
}

int Student::getOverallGrade() {
sum = exams[0] + exams[1] + exams[2];
average = sum / 3;
return average;
}

void Student::display() {
cout << "ID: " << getID();
cout << " NAME: " << getName();
cout << " GRADE: " << getOverallGrade() << endl;
}
#endif

成绩册.cpp

#ifndef GRADEBOOK_CPP
#define GRADEBOOK_CPP
#include "Student.h"
#include <iostream>
using namespace std;

int main() {

Student *s = new Student(123, "John");
s->setExamGrade(0, 80);
s->setExamGrade(1, 60);
s->setExamGrade(2, 95);
s->display();
delete s;

return 0;
}

#endif

最佳答案

你永远不会在构造函数中分配给 id,因此它是未初始化的,当你打印它时你将有未定义的行为

改变

num = id;

id = num;

name 相同。


还有声明

exams[0, 1, 2] = 0;

不做你期望它做的事,它只将 exams[2] 初始化为 sero,其余未初始化。表达式 0, 1, 2 使用 comma operator .

要么单独分配给数组的所有成员,要么使用 constructor member initializer list (我建议所有初始化)。

关于c++ - 打印出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32629207/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com