我正在使用嵌套数组结构和多个for循环来显示文本文件,如下所示:
但是循环在第二行停止,我不知道这是什么问题。 有人可以帮忙吗?
示例文本文件
1204042,Alexa Danvers,012-4567891,alex@hotmail.com,S01,Science,A,S02,Art,B,S03,Music,B,S04,Math,A,
1204137,Goh Xin Chan,013-4587212,gohxin@hotmail.com,S01,Science,B,S02,Art,B,
1204675,Liu Xiao Meng,012-5647891,liu_96@hotmail.com,S03,Music,A,S04,Math,A,S05,English,C,
//读
for (int i = 1; i <= maxInfo; i++)
{
inFile.getline(record[i].id, 15, ',');
inFile.getline(record[i].name, 40, ',');
inFile.getline(record[i].phone, 15, ',');
inFile.getline(record[i].email, 30, ',');
for (int j = 1; j <= 5; j++)
{
inFile.getline(record[i].subjects[j].code, 6, ',');
inFile.getline(record[i].subjects[j].subName, 15, ',');
inFile.getline(record[i].subjects[j].grade, 5, ',');
}
}
//显示
for (int i = 1; i <= maxInfo; i++)
{
cout << setw(2) << left << i << ". " << setw(14) << left << record[i].id << setw(20);
cout << record[i].name << setw(20) << record[i].phone << setw(32) << record[i].email;
for (int j = 1; j <= 5; j++)
{
cout << "" << setw(18) << record[i].subjects[j].code << setw(18)
<< record[i].subjects[j].subName << setw(18)
<< record[i].subjects[j].grade << "\n" << setw(91);
}
}
答案 0 :(得分:0)
您正在阅读代码,子名称和等级,最多5次。读取第一行时发生的情况是在第五次读取时,没有这样的数据,它停在换行符处。因此,对subName和grade的第5次迭代读取实际上将在读取第二行。
一种更好的读取方式是将整行读取为一个字符串,然后将字符串格式化为数据结构,并通过计算字符串中存在的','的数目来确定有多少个循环来读取主题或在字符串末尾终止。