使用嵌套数组结构显示文本文件

时间:2019-04-05 14:42:19

标签: c++

我正在使用嵌套数组结构和多个for循环来显示文本文件,如下所示:

enter image description here

但是循环在第二行停止,我不知道这是什么问题。 有人可以帮忙吗?

示例文本文件

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);

    }

}

1 个答案:

答案 0 :(得分:0)

您正在阅读代码,子名称和等级,最多5次。读取第一行时发生的情况是在第五次读取时,没有这样的数据,它停在换行符处。因此,对subName和grade的第5次迭代读取实际上将在读取第二行。

一种更好的读取方式是将整行读取为一个字符串,然后将字符串格式化为数据结构,并通过计算字符串中存在的','的数目来确定有多少个循环来读取主题或在字符串末尾终止。