我正在尝试读取文件并打印它。 .txt文件是我试图打印的迷宫,因此我首先将它放在2d char数组中。但正如你可以看到我打印输出时,它会以某种方式搞砸了。发生了什么???
的main.cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
using namespace std;
void beginGame();
int main(){
beginGame();
return 0;
}
void beginGame(){
char map[20][30];
//read a .txt file into the program
ifstream file;
file.open("FloorA.txt");
char c;
for (int i = 0; i < 20; i++){
for (int j = 0; j < 30; j++){
file.get(c);
map[i][j] = c;
}
}
file.close();
//print the array
for (int i = 0; i < 20; i++){
for(int j = 0; j < 30; j++){
cout << map[i][j];
}
cout << "." << endl;
}
}
FloorA.txt
##############################
# K #
# ############## ### ### # #
# K # # #C# #K# # #
# ######### # A # # # # # # #
# K # # # #
# ############D#####D####### #
# #
# C G C #
# #
# ######D##############D#### #
# # C #K# # #
# #### ######## # # # #
# #K # # ### # # #### #
# # ## # #### # # # # # #
E # ## # # ### # # #### # #
# # # #K D # #
# #D#### ################### #
# K #
##############################
输出:
##############################.
# K .
# ############## ### ### #.
# K # # #C# #K# .
# ######### # A # # # # # .
# K # # .
# ############D#####D###.
# .
# C G .
# .
# ######D###########.
# # C .
# #### ######## # .
# #K # # #.
# # ## # #### # .
E # ## # # #.
# # # #K .
# #D#### ####. #
# .## #
###########. #
答案 0 :(得分:0)
FloorA.txt有30个字符加上换行符,每行总共31个字符。您可以将数组更改为map [20] [31]并循环浏览j&lt; 31在第一个循环中。
答案 1 :(得分:0)
实际输出是
##############################.
# K .
#
# ############## ### ### #.
#
# K # # #C# #K# .
# #
# ######### # A # # # # # .
# #
# K # # .
# #
# ############D#####D###.
#### #
# .
#
# C G .
C #
# .
#
# ######D###########.
###D#### #
# # C .
#K# # #
# #### ######## # .
# # #
# #K # # #.
## # # #### #
# # ## # #### # .
# # # # #
E # ## # # #.
## # # #### # #
# # # #K .
D # #
# #D#### ####.
############### #
# .
K #
###########.
不合适的换行符应该为您提供线索 - 每行FloorA.txt
都有30
个字符,后跟换行符。 get
不会忽略换行符。因此,虽然map[0][0]
到map[0][29]
具有所需的值,但31
个字符读取(换行符)将写入map[1][0]
。这也解释了输出的其余部分。要解决此问题,请单独阅读换行符。
for (int i = 0; i < 20; i++){
for (int j = 0; j < 30; j++){
file.get(c);
map[i][j] = c;
}
file.get(c);//To read the newline
}