【问题标题】:My 2D array isn't reading my text files and outputting correctly我的二维数组没有读取我的文本文件并正确输出
【发布时间】:2019-06-24 23:44:14
【问题描述】:

我希望能够将文本文件中的字母读入二维数组。我正在执行所有步骤,但我的输出完全不正确。

我尝试初始化数组,尝试更改 for 循环,尝试本地化我的 const int 值,但没有任何效果。

#include <iostream>
#include <iomanip>
#include <fstream>

using namespace std;



int main()
{
    const int ROWS = 5;
    const int COLS = 3;
    ifstream inFile("grades.txt");

    char gradeArray[ROWS][COLS] = {0};

    inFile.open("grades.txt");

    if (!inFile.is_open())
    {
        cout << "Error opening the file.";
        exit(1);
    }

    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            inFile >> gradeArray[i][j];
        }
    }
        cout << gradeArray[0][1];


    inFile.close();

system("pause");
return 0;
}

TXT 文件(我的资源文件中的grades.txt)

编辑:每个字母都有自己的换行符。不知道为什么他们在同一个。

一个 R 乙 C H G C F 小号 乙 一种 一种 小号 E

F

我希望将字母“R”作为测试输出,因为这是我在最后一个 cout 语句中要求的,但我得到 [ Press any key to continue 。 . .]。所以只是一个空间。请帮忙。谢谢!

到目前为止,我已经尝试了给我的建议,但没有奏效。我在想文件没有被正确读取?或者文件输出不正确...

【问题讨论】:

  • inFile.open("grades.txt"); 是多余的。 ifstream inFile("grades.txt"); 应该已经打开了文件。
  • 您是否尝试过将 ide 与 Visual Studio 之类的调试器一起使用?您收到错误消息 Error opening the file. 打印了吗?也许它被打印并且窗口关闭了。如果程序打开文件,您似乎使用system("pause"); 来保持窗口打开,但如果它失败了,您会立即终止它。
  • 执行std::cout.flush()(或std::cout &lt;&lt; std::flush;)以确保您的输出在开始暂停之前刷新到控制台。另一种方法是在你的信之后打印一个std::endl,它会打印一个换行符'\n',并且刷新流。
  • @drescherjm 我根本没有打印错误声明。我正在使用 Visual Studio,但我对编码很陌生,而且我们还没有学习调试,所以我认为没有它可以解决这个问题。另外,当我从inFile中删除(“grades.txt”)时,错误仍然是一样的。
  • 我的建议是了解 F9、F10 和 F11 键的作用。

标签: c++ arrays file ifstream


【解决方案1】:

IIRC 执行 inFile &gt;&gt; gradeArray[i][j] 将捕获空白;您应该能够通过读取字符串来解决此问题,而不是跳过空格;只需在顶部添加#include &lt;string&gt;,然后在循环中读入字符串并将成绩作为第一个字符,类似于

string line;
inFile >> line;
gradeArray[i][j] = line.empty() ? ' ' : line[0];

或您想要表示缺失数据的任何字符。

【讨论】:

  • 所以我已经包含了字符串库,并将我的数组变成了一个字符串。新的输出现在完全没有显示。我没有看到“按任意键继续”。
  • 我再说一遍,花 10 分钟来了解 F9、F10 和 F11 的作用。然后您可以更好地了解正在发生的事情。
  • 否:实际上这调用了字符提取运算符,它会跳过空格。你在想inFile.get()
  • @drescherjm 我试过调试,但它没有给我任何信息。我假设编译器认为代码工作正常,我认为我的问题是文件根本没有被读取。
  • 您需要使用F10 和可能的F11 一次遍历代码1 行(如果您有不想进入的函数)并查看每个变量步。调试器不应该告诉你出了什么问题。你应该用它来解决这个问题。
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 2019-06-16
  • 1970-01-01
  • 2014-04-15
  • 2021-12-22
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多