我试图将这种格式的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
,这就是它打印的内容。
@@@@@@@@@@@@@@@@@@@@
@@@ @ @ @@
@@
@ @ @@ @ @ @
@ @@
@ @ @ @ @
@@ @
@ @@@ @ @
@@ @ @
@@@@@@@@@@
我需要更改代码?
答案 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;
}