C++:使用get()读取文件;没有按预期工作

C++: Reading from a file with get(); not working as intended

本文关键字:工作 文件 使用 get 读取 C++      更新时间:2023-10-16

假设我有一个文件,如下所示:

|----------------------------------------------|
|                                              |
| |---------|       |--------------|           |
| |.........|       |..............|           |
| |.........|       |..............|           |
| |----+----|       |----+---------|           |
|      #                 #                     |
|      ###################                     |
|                                              |
|----------------------------------------------|

(它将是游戏的地图文件)
在这种情况下,MAX_WIDTH是48,MAX_HEIGHT是10。

我制作它是为了在阅读
时不会跳过空白infile.unsetf(ios_base::skipws);

然后我在如下循环中使用get()

char tile[MAX_HEIGHT][MAX_WIDTH];
char c;
for(int i=0; i<MAX_HEIGHT; i++) {
    for(int j=0; j<MAX_WIDTH + 1; j++) {
        infile.get(c);
        if(c == 'n') {
            continue;
        }
        tile[i][j] = c;
    }
}

但在每一行之后,当我打印数组时,看起来就像是在推行。

|--------------------------------------------|
|
|| |--------|      |-------------|
|| |........|      |.............|
 || |........|      |.............|
  || |----+---|      |----+--------|

不完全是这样。

可能出了什么问题,我该怎么办?

(+)打印数组如下:

for(int i=0; y<MAX_HEIGHT; y++) {
    for(int j=0; x<MAX_WIDTH; x++) {
        cout << tile[y][x];
    }
    cout << endl;
}

如果输入文件中有windows样式的换行符,则需要为每个换行符读取两个字符。rn。这将解释您损坏的输出。

修复方法是使用std::getline样式的函数而不是get。或者明确检查rn组合。

我想应该是j<最大宽度+1

由于你的第一行是好的,可能会在你的第二行开始

尝试删除+1

编辑:

  1. 删除+1
  2. 您可以尝试在阅读时添加对两者的检查