文本到2D字符数组

时间:2015-08-21 08:59:02

标签: c multidimensional-array

我试图将这种格式的txt文件保存为二维数组。

@@@@@@@@@@@@@@@@@@@@
    @@@ @ @ @@    @@
@ @ @@  @ @    @@ @@
@ @   @   @ @  @@  @
@ @@@ @ @   @@   @ @
@@@@@@@@@@@@@@@@@@@@

截至目前,我的代码如下所示:

char maze[H][W];
int i;
char filename[100];

printf("Enter maze's filename: ");
scanf("%s", filename);
FILE *fp;
fp = fopen(filename, "r");
fread(maze, 1, sizeof(maze), fp);
for (i = 0; i < H; ++i) 
    maze[i][W] = 0;

H和W定义为6和20.当我使用:

打印时
int i, j;
for(i=0; i<H; i++){
    for(j=0; j<W; j++){
        printf("%c", maze[i][j]);
    }
printf("\n");
}

我包含.txt,这就是它打印的内容。

@@@@@@@@@@@@@@@@@@@@

    @@@ @ @ @@
@@
@ @ @@  @ @    @
@ @@
@ @   @   @ @
  @@  @
@ @@@ @ @
@@   @ @
@@@@@@@@@@

我需要更改代码?

3 个答案:

答案 0 :(得分:0)

#define H 6
#define W 21 //change to 21, +1 for newline

...

char maze[H][W];
int i, j;
char filename[100];

printf("Enter maze's filename(w/o .txt): ");
scanf("%s", filename);
FILE *fp;
fp = fopen(filename, "r");
fread(maze, 1, sizeof(maze), fp);
for (i = 0; i < H; ++i) maze[i][W-1] = 0;

for(i=0; i<H; i++){
    printf("%s\n", maze[i]);//change
}

答案 1 :(得分:0)

看起来该文件包含\ r \ n(windows样式)换行符,即2个字符。所以你必须阅读6 *(20 + 2)个字符,但printf只有6 * 20个字符,如果你保持它的编码方式。

答案 2 :(得分:0)

如果您必须保持文本格式地图与迷宫之间的兼容性,则需要跳过每行末尾的最终\n

您可以及时阅读一行并跳过换行符。

该示例还显示了适用于C 中多维数组的arrray数组的性质。

#include <stdio.h>

#define H  6
#define W 20

void PrintMaze(char maze[H][W])
{
    int i, j;
    for (i = 0; i < H; i++)
    {
        for (j = 0; j < W; j++)
        {
            printf("%c", maze[i][j]);
        }
        printf("\n");
    }
}

int main(int argc, char *argv[])
{
    char maze[H][W];
    int i;
    char filename[100];

    printf("Enter maze's filename: ");
    scanf("%s", filename);
    FILE *fp;
    fp = fopen(filename, "r");
    for (i = 0; i < H; ++i)
    {
        fread(maze[i], 1, W, fp);    //we use a single subscipt we get an array of W elements
        fgetc(fp);  //Skip '\n'
    }

    PrintMaze(maze);

    return 0;
}