首页 > 解决方案 > 将文本文件中的名称列表读入二维数组

问题描述

我正在尝试将文本文件中的一列名称读取到二维数组中,名称的长度各不相同,但最长为 8 个字母,其中有 10 个。这是我的两个 for 循环来读取名称然后打印它们。

for (int i = 0; i != 10; i++) {
    for (int j = 0; j != 8; j++) {
        infile >> textfileinfo[i][j];
    }
}

然后打印名字我有这个循环。

for (int i = 0; i != 10; i++) {
    for (int j = 0; j != 8; j++) {
        cout << textfileinfo[i][j];
    }
    cout << " " << endl;
}

以下是名称列表:

Victor
Eve
Juliet
Hector
Danielle
Romeo
Oscar
June
Ares
Dannae

最终发生的情况是,它无论如何都会用 8 个字符读出名称,从下一个名称中取出多余的字符,然后Victor变成VictorEv,然后eJulietH依此类推。一旦到达 Victor 的末尾,我如何让它从下一行开始,然后转到 Eve 等。我也不允许使用指针。任何帮助表示赞赏!谢谢。

标签: c++file-io

解决方案


似乎显而易见的事情是使用getline. getline旨在阅读单行文本。

for (int i = 0; i != 10; i++) {
     infile.getline(textfileinfo[i], 9);
}

请注意,getline 的第二个参数是 9,因为您需要一个额外的字符来存储结束每个 C 样式字符串的 nul 终止符。这也意味着您的二维数组需要在每行中至少声明 9 个字符。稍微安全一点的代码是明确表示

infile.getline(textfileinfo[i], sizeof textfileinfo[i]);

如果由于某种原因不允许使用,getline那么您将不得不修改内部循环以检测和处理'\n'终止每一行的字符。


推荐阅读