【问题标题】:how can input txt file to 2d array completely at C如何在 C 中将 txt 文件完全输入到二维数组
【发布时间】:2021-07-07 09:40:03
【问题描述】:

我正在尝试将 txt 文件转换为二维数组。但是后面的一些值被遗漏了。我想知道为什么会这样。

this is txt file's form I want to get

#define MAZE_ROW 11
#define MAZE_COL 22

char maze[MAZE_ROW][MAZE_COL];
int main(){
    Get_Maze();
    Print_Maze();
}

void Get_Maze(){
    FILE *f=fopen("maze.txt","r");
    for(int i=0;i<MAZE_ROW;i++){
        for(int j=0;j<MAZE_COL;j++){
                fscanf(f,"%c",&maze[i][j]);
        }
    }
    fclose(f);
}

void Print_Maze(){
    for(int i=0;i<MAZE_ROW;i++){
        for(int j=0;j<MAZE_COL;j++){
            printf("%c",maze[i][j]);
        }
    }
}

this is the result of my code

【问题讨论】:

  • 为方便起见,请将输入 txt 文件的内容以及结果输出添加为文本块而不是链接图像。这将允许轻松复制+粘贴以重现问题。
  • 首先,您需要在调用它们之前声明您的函数。第二,你为什么觉得少了点什么?你数过输出中的字符了吗?有几个?
  • 实际上,我认为您将输入 txt 中的换行符读取到数组中。相反,您需要一些方法来跳过它们,只阅读0|1 内容。
  • fscanf(f,"%c",&amp;maze[i][j]); 也将读取 '\n'。 황성문,这是你想要的吗?试试"%c" --------> " %c"(加空格)。

标签: arrays c txt


【解决方案1】:

问题在于 '\n' - 换行符。在您的文本文件中,每行的末尾都有一个“\n”,并且通过使用fscanf(f,"%c",&amp;maze[i][j]);,您不会跳过任何空格(空格、制表符、换行符等),因此您的代码会跳过最后一个文本文件中的 0|1 很少,因为它的一些值已经分配给 '\n' 并且 maze[MAZE_ROW][MAZE_COL] 变量的成员太少。

一个快速的解决方法是使用例如:

fscanf(f," %c",&amp;maze[i][j]);(在 %c 之前有空格) - 这将导致 fscanf 忽略任何空格,在你的情况下是 '\n',它只会加载你想要的字符。

问题是这将导致您的输出在一行中,因为您没有打印任何新行,所以最后一件事是将您的 Print_Maze() 更改为此

void Print_Maze(){
    for(int i=0;i<MAZE_ROW;i++){
        for(int j=0;j<MAZE_COL;j++){
            printf("%c",maze[i][j]);
        }
        printf("\n");
    }
}

【讨论】:

  • 这也会跳过输入文件中的空格。
  • 嗯,是的,但是由于他的输入文件没有任何空格,它不会影响输出中的任何内容。我在回答中指定了它,说在这种情况下唯一忽略的空格将是 '\n'
猜你喜欢
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多