C++ C++;:使用get()从文件中读取;未按预期工作
假设我有一个如下所示的文件:C++ C++;:使用get()从文件中读取;未按预期工作,c++,C++,假设我有一个如下所示的文件: |----------------------------------------------| | | | |---------| |--------------| | | |.........| |..............| | | |.........| |..............|
|----------------------------------------------|
| |
| |---------| |--------------| |
| |.........| |..............| |
| |.........| |..............| |
| |----+----| |----+---------| |
| # # |
| ################### |
| |
|----------------------------------------------|
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;
}
(这将是游戏的地图文件)在这种情况下,
MAX_WIDTH
为48,MAX_HEIGHT
为10
我这样做是为了在使用infle.unset(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;
}
不完全是这样的
可能出了什么问题?我该怎么办
(+)打印数组的过程如下所示:
|----------------------------------------------|
| |
| |---------| |--------------| |
| |.........| |..............| |
| |.........| |..............| |
| |----+----| |----+---------| |
| # # |
| ################### |
| |
|----------------------------------------------|
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;
}
对于(inti=0;y我想应该是j
既然你的第一行是好的,问题就从你的第二行开始
尝试删除+1
编辑:
移除+1
阅读时,您可以尝试在两个\r\n上都添加一个检查
如果输入文件中有windows样式的换行符,则需要为每个换行符读取两个字符。\r\n
。这可以解释输出损坏的原因
解决方法是使用std::getline
样式的函数,而不是get
。或者显式检查\r\n
组合。您如何确定上述输出?@TimBiegeleisen您的意思是什么?向我们展示读取数组后打印数组的代码。@TimBiegeleisen我已经添加了代码!我认为king itfor(int j=0;jt)这使得它被进一步推送。使它+2使它工作,但我不明白为什么。您使用的是Windows还是Linux?可能有\r或\n取决于您在Windows上使用升华文本并在Linux上编译的操作系统(使用PuTTY)