C++:使用get()读取文件;没有按预期工作
C++: Reading from a file with get(); not working as intended
假设我有一个文件,如下所示:
|----------------------------------------------|
| |
| |---------| |--------------| |
| |.........| |..............| |
| |.........| |..............| |
| |----+----| |----+---------| |
| # # |
| ################### |
| |
|----------------------------------------------|
(它将是游戏的地图文件)
在这种情况下,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
- 您可以尝试在阅读时添加对两者的检查
相关文章:
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的文件无法正常工作,无法从C++文件中读取上下文
- 我的 SDL2 程序需要哪些二进制文件,以便它在另一台未安装 SDL2 的计算机中工作
- 有没有办法关闭文件? fclose 不能很好地工作
- G++ 在生成文件中使用时停止工作
- 代码作为 C 文件工作,但不作为C++文件,错误:'__builtin_types_compatible_p'未在此范围内声明
- 无法使用 Visual Studio 启动 DirectX 11 可执行文件,生成工作正常
- 使用.cpp文件让 RcppArmadillo 在 Rstudio 中工作
- 读取二进制文件大小的短自上周以来停止工作
- 我的 PowerShell 脚本无法按预期工作(用于编译C++文件)
- 不同文件的类,如何使其工作?
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- C Visual Studio代码不使用工作区中的单个文件夹编译
- 在循环工作时,首先将两个文件读为向量,但仅次于迭代一次
- 在Qt中使用工作线程将数据写入文件的正确方法是什么?
- OpenCV:文件存储操作员">>"在一个项目中工作,但不在另一个项目中工作(在同一类上)
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- 程序在我的C++工作区中找不到头文件
- 从工作目录 QtWebEngine 读取文件
- 不完整的参数错误,包括其他.cpp文件中的postgres.cpp工作文件