【问题标题】:Reading a list of names from a text File into a 2D array将文本文件中的名称列表读入二维数组
【发布时间】:2019-01-27 22:50:10
【问题描述】:

我正在尝试将文本文件中的一列名称读取到二维数组中,名称的长度各不相同,但最长为 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 等。我也不允许使用指针。任何帮助表示赞赏!谢谢。

【问题讨论】:

  • 为什么这是一个二维数组而不是std::vector&lt;std::string&gt;
  • @drescherjm 作业指南说我们必须将其读入二维数组。

标签: c++ file-io


【解决方案1】:

似乎显而易见的是使用getlinegetline 旨在读取单行文本。

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

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

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

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

【讨论】:

  • 是的,很遗憾我们不能使用&lt;string&gt; 标头,所以我只需要修改它,有什么建议可以解决吗?
  • 上面的代码不需要&lt;string&gt; header
  • 啊,好的,我出错了,它现在可以工作了!谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多