【发布时间】:2019-03-14 22:51:20
【问题描述】:
我正在读取具有名称 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;
【问题讨论】:
-
Student *students[100];是一个包含 100 个指针的数组。这些指针指向哪里?您没有为实际的Student对象分配任何内存 -
while(inFile.eof())是错误的。并且Student* students[100];应该是Student students[100];(Student对象而不是Student*指针),但是如果将其更改为std::vector<Student> students;,那么您可以完全摆脱dynamicStudents和counter,因为vector是已经是一个动态数组了。 -
为了有用的参考,像
Student *students[100];这样的声明是从右到左读取的:数组,有100个元素,命名为student,由Student类型的指针组成。 -
@Tzalumen 实际上,他们最好阅读in a spiral instead。
标签: c++ pointers struct dynamic-arrays