c++ - 为什么我不能在我的结构中打印名称?
问题描述
我正在读取具有名称 ID 和等级的数据文件,并将信息存储在 struc 中并使用指针数组来存储 struc 地址。完成后,我将其动态分配给一个数组,然后我想打印所有结构中的名称,但没有打印,也没有错误消息。如何打印新动态数组中每个结构的名称?
这是我下面的代码
ifstream inFile;
Student *students[100];
string netID, studentName;
double grade1, grade2, grade3;
inFile.open("Asg3Grades.txt"); //opens the file
int counter = 0;
while(inFile.eof()){
inFile >> netID >> studentName >> grade1 >> grade2 >> grade3;
double average = (grade1+grade2+grade3)/3;
students[counter]->ID=netID;
students[counter]->name=studentName;
students[counter]->grade=average;
counter++;
}
inFile.close(); //closes the file
Student *dynamicStudents = nullptr;
dynamicStudents = new Student[counter];
for (int i=0; i<counter; i++) {
dynamicStudents[i] = *(students[i]);
}
for (int i=0; i<counter; i++) {
cout << dynamicStudents[i].name << endl;
}
return 0;
解决方案
尝试更多类似的东西:
ifstream inFile;
Student students[100];
int counter = 0;
string line, netID, studentName;
double grade1, grade2, grade3;
inFile.open("Asg3Grades.txt"); //opens the file
while (getline(inFile, line)) {
istringstream iss(line);
if (iss >> netID >> studentName >> grade1 >> grade2 >> grade3) {
double average = (grade1 + grade2 + grade3) / 3;
students[counter].ID = netID;
students[counter].name = studentName;
students[counter].grade = average;
if (++counter == 100) break;
}
}
inFile.close(); //closes the file
Student *dynamicStudents = new Student[counter];
for (int i = 0; i < counter; i++) {
dynamicStudents[i] = students[i];
}
for (int i = 0; i < counter; i++) {
cout << dynamicStudents[i].name << endl;
}
delete[] dynamicStudents;
不过,您根本不需要固定数组:
ifstream inFile;
Student* students = nullptr;
int counter = 0, capacity = 0;
string line, netID, studentName;
double grade1, grade2, grade3;
inFile.open("Asg3Grades.txt"); //opens the file
while (getline(inFile, line)) {
istringstream iss(line);
if (iss >> netID >> studentName >> grade1 >> grade2 >> grade3) {
double average = (grade1+grade2+grade3)/3;
if (counter == capacity)
{
Student *temp = new Student[capacity + 100];
for (int i = 0; i < counter; ++i)
temp[i] = students[i];
delete[] students;
students = temp;
capacity += 100;
}
students[counter].ID = netID;
students[counter].name = studentName;
students[counter].grade = average;
++counter;
}
}
inFile.close(); //closes the file
for (int i = 0; i < counter; ++i) {
cout << students[i].name << endl;
}
delete[] students;
可以通过使用std::vector
而不是进一步简化new[]
:
ifstream inFile;
vector<Student> students;
string line, netID, studentName;
double grade1, grade2, grade3;
inFile.open("Asg3Grades.txt"); //opens the file
while (getline(inFile, line)) {
istringstream iss(line);
if (iss >> netID >> studentName >> grade1 >> grade2 >> grade3) {
double average = (grade1+grade2+grade3)/3;
Student student;
student.ID = netID;
student.name = studentName;
student.grade = average;
students.push_back(student);
}
}
inFile.close(); //closes the file
for (size_t i = 0; i < student.size(); ++i) {
cout << students[i].name << endl;
}
推荐阅读
- php - 登录失败超过 3 次时阻止用户
- excel - 粘贴特殊错误 1004 Range 类的 PasteSpecial 方法失败,因为 Paste:=xlPasteValues
- flutter - 显示个人资料图片谷歌玩游戏时出现颤振错误
- react-native - 如果我尝试在我的 react 本机应用程序中使用 firebase,是否需要使用 redux-persist?
- javascript - 关于在 Javascript 中使用“new”运算符的问题
- sitefinity - Sitefinity - 删除后端屏幕中的翻译列
- stripe-payments - 如何检查付款单是否打开?
- javascript - 我怎样才能让我的轮播在 Angular 8 中工作
- php - 无法让我的 php 为联系表单工作
- java - response.body().getResponseCode()==200 - 无响应