【问题标题】:Problems with scanning character matrixes from a file in C从 C 文件中扫描字符矩阵的问题
【发布时间】:2020-08-30 02:43:12
【问题描述】:

在这个简单的程序中,我的目标是从文件(称为 map.dat)中扫描矩阵。出于某种原因,每当我尝试扫描它时,一切都很顺利,直到第 6 行。在它获取第 5 行中的所有元素后,它继续扫描第 6 行,这会工作一段时间,然后当 j==10 时,第 6 行的元素开始进入第 5 行,然后从第 9 行中删除矩阵。我尝试使用字符串一次扫描一行,但结果似乎是一样的。

#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLUMNS 40

int main(int argc,char* argv[])
{
    FILE* fp=fopen("map.dat","r");

    if(fp==NULL)
    {
        exit(1);
    }

    char m[ROWS][COLUMNS+2];
    int i,j;

    for(i=0; i<ROWS; i++)
    {
        for(j=0; j<COLUMNS+1; j++)
        {
            fscanf(fp,"%c",&m[i][j]);
        }
    }
   return 0;
}

这是 map.dat 文件中的内容:

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

【问题讨论】:

  • 当您可以只使用fread 并自己解析时,为什么还要对fscanf 大惊小怪?鉴于所需格式与文件中的内容有多接近,您可以对缓冲区进行一些非常简单的处理,并从原始缓冲区中获得您想要的数组。
  • 检查fscanf的返回值
  • @tadman 我是一个非常基础的程序员,我正在为我的 CS 课学习,我们只见过 fscanf 或 fgets,所以我相信在解决这个问题时我们应该使用这些函数。
  • fscanf 是你应该尽快摆脱的拐杖。 C 的真正潜力在于制作自己的简单解析器,并在必要时增加复杂性。
  • @4386427 它正在返回 1

标签: c file multidimensional-array


【解决方案1】:

我刚刚打印了它,它工作得很好。

#include <stdio.h>
#include <stdlib.h>
#define ROWS 10
#define COLUMNS 40

int main(int argc,char* argv[])
{
    FILE* fp=fopen("/home/avidbots/Desktop/test/map.dat","r");

    if(fp==NULL)
    {
        exit(1);
    }

    char m[ROWS][COLUMNS+2];
    int i,j;

    for(i=0; i<ROWS; i++)
    {
        for(j=0; j<COLUMNS+1; j++)
        {
            fscanf(fp,"%c",&m[i][j]);
        }
    }

    for(i=0; i<ROWS; i++)
    {
        for(j=0; j<COLUMNS+1; j++)
        {
            printf("%c", m[i][j]);
        }
        printf("\n");
    }

   return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多