我应该创建一个函数,它接收数组作为参数,并搜索3个等级中平均值最高的学生,并返回到数组中学生的主要位置。
4个阵列是: 学号(9位数) 数学等级 科学等级 英语成绩
最后,它应该将文件中的数据读入数组。
档案数据是:
123456789
60
70
80
987654321
70
80
90
999888777
75
85
65
111222333
55
65
75
444555666
63
73
83
我需要有关如何使用数组和函数读取文件数据的帮助。
这是我到目前为止所做的:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int findHighest(int Mgrade[5], int Sgrade1[5], int Egrade[5], long Snumber[5]);
main()
{
int Mgrade[5], Sgrade[5], Egrade[5];
long Snumber[5];
char num_from_file;
ifstream infile;
char mystring[20];
int grade;
infile.open("testdata.txt", ios::in);
if (infile)
{
cout<<"File opened successfully\n";
{
do
{
infile.get(mystring,21); //(example from other program)
infile.ignore(80,'\n');// (what should go here instead)
infile>> grade;//(example from other program)
infile.ignore(80,'\n');// (what should go here instead)
if (infile.eof())
{
break;
}
cout<<mystring<<'\t'<<grade<<endl<<endl;
//cout<<'\t'<<num_from_file<<endl;
}
while(1);
}
}
else
{
cout<<"error opening file";
}
infile.close();
return 0;
}
答案 0 :(得分:1)
只需使用getline()
,就像这样:
#include <fstream>
#include <iostream>
#include <string>
int main(void) {
int Mgrade[5], Sgrade[5], Egrade[5];
long Snumber[5];
std::ifstream input("testdata.txt");
int index = 0, counter = 0;
for( std::string line; getline( input, line ); ) {
if(counter == 4) {
counter = 0;
index++;
}
if(counter == 0) {
Snumber[index] = std::stol(line);
} else if(counter == 1) {
Mgrade[index] = std::stoi(line);
} else if(counter == 2) {
Sgrade[index] = std::stoi(line);
} else if(counter == 3) {
Egrade[index] = std::stoi(line);
}
counter++;
}
return 0;
}
代码逐行读取文件(代码中的变量input
)并使用for循环来实现。
在循环的每次迭代中,变量line
将包含我们正在读取的文件的当前行。例如,在第一次迭代中,line
将等于"123456789"
。
现在我使用两个整数index
和counter
。第一个用于索引数组,因为我们正在读第一个学生,我们想要填充每个数组的第一个单元格(即index
等于0)。
counter
用于跟踪idnex
位学生已读取的行数。我们希望为每个学生阅读4行,因此当我们阅读他的数字时counter
将为0,当我们阅读他的数学成绩时为{1},当我们阅读他的科学成绩时为2,当我们阅读他的英语成绩时为3。在每次迭代结束时,计数器增加1。
现在,当counter
等于4时,这意味着我们应该开始为下一个学生读取数据,因此我们必须将index
增加1,这样,例如,如果我们正在阅读第一个学生的数据(index
等于0),现在我们需要(index
等于1)。
此外,counter
应该重新初始化为0,以便我们使用if-else语句正确读取他的数字和成绩。