gpt4 book ai didi

c++ - 在 C++ 中读取文件、搜索和显示信息到结构数组的问题

转载 作者:行者123 更新时间:2023-11-28 04:14:15 26 4
gpt4 key购买 nike

抱歉,如果这看起来很愚蠢,我是 C++ 的新手,而且我无法显示从输入文件读入结构数组的信息。

我有 3 个函数。一个用于将我的文件读入数组,一个用于提示用户在数组中搜索特定结构,最后一个用于显示数组的内容。

我不确定我的 readFile()displayAllStudents() 是否损坏。我能够从文件中输出第一行,但其余的是 0。接下来我的 selectStudent() 可能很糟糕;我在为我要完成的任务找到好的解决方案时遇到了麻烦。

我已经尝试过这里发布的许多解决方案,但我的问题似乎很独特,所以我希望我能帮助指出正确的方向。

Input file and desired output.


ID CLA OLA Quiz Homework Exam Bonus Total FinalGrade
c088801 10 15 4 15 56 5
c088802 9 12 2 11 46 2
c088803 8 10 3 12 50 1
c088804 5 5 3 10 53 3
c088805 3 11 1 10 45 0
c088806 8 14 2 11 40 -1
c088807 4 12 2 12 48 -2
c088808 10 10 3 11 36 0
c088809 8 8 3 11 39 0
c088810 6 9 4 9 47 3
c088811 8 7 3 13 41 3
c088812 4 11 3 11 37 1
c088813 9 15 2 8 50 2
c088814 8 12 2 10 48 4
c088815 6 8 1 7 45 1
c088816 7 7 2 6 51 2
c088817 8 9 2 12 38 2
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

struct Student {
char ID[7];
int CLA;
int OLA;
int Quiz;
int Homework;
int Exam;
int Bonus;
int Total;
int FinalGrade;
};
const int SIZE = 20;

//Function prototypes
void readFile(Student[]);
int selectStudent(Student[]);
void displayAllStudents(Student[]);

int main() {
Student Roster[SIZE] = {}; //Initalizes array

readFile(Roster);
//selectStudent(Roster);
displayAllStudents(Roster);

system("pause");
return 0;
}

//This function will read the text file into our array of structures.
void readFile(Student Roster[]) {
ifstream inFile("point.dat"); //Reads input file
string line;

getline(inFile, line); //Skips first line of file

for (int i = 0; i < SIZE; i++) {
inFile >> Roster[i].ID >> Roster[i].CLA >> Roster[i].OLA >>
Roster[i].Quiz >> Roster[i].Homework >> Roster[i].Exam >>
Roster[i].Bonus >> Roster[i].Total >> Roster[i].FinalGrade;
}

}

//This function will prompt user to select an individual student ID
//then display that student's information.
int selectStudent(Student Roster[]) {
char* cNumber;

cout << "Please enter the student's c-number:" << endl;
cin >> cNumber;

for(int i; i < SIZE; i++){
if(strcmp(Roster[i].ID, cNumber)==0){
return i;
}
}
return -1;
}

//This function will display all our student information
void displayAllStudents(Student Roster[]) {
cout << " ID CLA OLA Quiz Homework Exam Bonus Total FinalGrade" << endl;

for (int i = 0; i < SIZE; i++) {
cout << Roster[i].ID[0] << Roster[i].ID[1] << Roster[i].ID[2] << Roster[i].ID[3] << Roster[i].ID[4] << Roster[i].ID[5] << Roster[i].ID[6]
<< " " << Roster[i].CLA << " " << Roster[i].OLA << " " << Roster[i].Quiz << " " <<
Roster[i].Homework << " " << Roster[i].Exam << " " << Roster[i].Bonus << " " <<
Roster[i].Total << " " << Roster[i].FinalGrade << endl;
}
}


My output.

ID CLA OLA Quiz Homework Exam Bonus Total FinalGrade
c088801 10 15 4 15 56 5 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Press any key to continue . . .

最佳答案

readFile 中,当您在这里读取文件内容时,您假设每个 Student 结构的所有字段都包含数据。

        inFile >> Roster[i].ID >> Roster[i].CLA >> Roster[i].OLA >>
Roster[i].Quiz >> Roster[i].Homework >> Roster[i].Exam >>
Roster[i].Bonus >> Roster[i].Total >> Roster[i].FinalGrade;

由于您的输入在 TotalFinalGrade 列中没有内容,当您的程序命中 >> Roster[i].Total 它实际上是第一次尝试读取第二个学生的 ID,c088802,这不是 Roster[i].Total 期望的整数值。

如果您知道您的输入数据永远不会在 TotalFinalGrade 列中有内容,您可以删除 >> Roster[i].Total >> Roster[i].FinalGrade 来自你的文件读取循环。

如果您知道您的输入数据可能不完整,但不知道将填充多少行,那么类似这样的方法应该可行,尽管可能有更好的方法。

for (int i = 0; i < SIZE; i++) {
getline(infile, line);
stringstream ss(line);

ss >> Roster[i].ID;

int value, count = 0;
while(ss >> value){
switch(count)
{
case 0: Roster[i].CLA = value;
break;
case 1: Roster[i].OLA = value;
break;
case 2: Roster[i].Quiz = value;
break;
...
case 7: Roster[i].FinalGrade = value;
break;
}
++count;
}
}

关于c++ - 在 C++ 中读取文件、搜索和显示信息到结构数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57007825/

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