将.text文件读入char数组并打印出来

时间:2015-03-05 03:15:16

标签: c++ arrays file io

我正在尝试读取文件并打印它。 .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#### ####. #
#           .## #
###########.     #    

2 个答案:

答案 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
    }