簡體   English   中英

將.txt文件讀入char數組並打印出來

[英]Reading a .txt file into a char array and printing it

我正在嘗試讀取文件並打印它。 .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#### ####. #
#           .## #
###########.     #    

FloorA.txt有30個字符加上換行符,每行總共31個字符。 您可以將數組更改為map [20] [31]並在第一個循環中循環j <31。

實際輸出是

##############################.

#      K                     .
#
#  ############## ### ###  #.
 #
#      K    #   # #C# #K#  .
# #
# ######### # A # # # # # .
 # #
#      K    #   #        .
  # #
# ############D#####D###.
#### #
#                      .
      #
#   C         G       .
 C     #
#                    .
        #
# ######D###########.
###D#### #
#      #  C        .
 #K#    # #
# #### ######## # .
  # #      #
# #K   #      # #.
## # # #### #
# # ## # #### # .
  # # #    # #
E # ## # #    #.
## # # #### # #
# #    # #K   .
        D    # #
# #D#### ####.
############### #
#           .
         K       #
###########.

FloorA.txt新行應該給你一個線索 - 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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM