【问题标题】:Reading from a file into 2D array returns wrong values in C?从文件读取到二维数组会返回 C 中的错误值?
【发布时间】:2017-03-26 17:47:07
【问题描述】:

所以我有一个简单的程序,它从文件中读取值,然后我只想将它们打印到屏幕上。将数组打印到屏幕时会出现此问题。它在数组中间添加了一些随机数。有人知道问题出在哪里吗?

这是输出:

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

#define MAXROW 10
#define MAXCOL 12

int main(void) {
    int i,j;

    char numbers[MAXROW][MAXCOL];


    FILE *file;  /*  FILE pointer  */
    file = fopen("data.txt", "r");  /* open a text file for reading */


    for(i=0;i<MAXROW;i++){
      for(j=0;j<MAXCOL;j++){
          fscanf(file, "%d\t", &numbers[i][j]);
          if(numbers[i][j] == '\n')
                i++;
          }
    }

    for (i=0; i<MAXROW; i++) {
      printf("\n");
        for (j=0; j<MAXCOL; j++) {
            printf("%d ",  numbers[i][j]);
        }
    }
    fclose(file);
    return 0;
}

这是我的 data.txt 文件:

【问题讨论】:

  • 请剪切并粘贴文本。不是图片
  • 删除fscanf格式字符串中的\t%d 格式会自动跳过前导空格,但您需要满足 \t 的要求。那奇怪的if(numbers[i][j] == '\n') i++ 是为了什么?你的意思是break;?为什么打破内循环时不应该有随机数? char numbers[MAXROW][MAXCOL];未初始化
  • 尝试在char numbers[...][...]; 中将char 更改为int -- 如果可行,我有一个答案。如果没有,我不知道。

标签: c arrays multidimensional-array fopen


【解决方案1】:

将循环更改为

for(i=0;i<MAXROW;i++)
  for(j=0;j<MAXCOL;j++)
      fscanf(file, "%d%*c", &numbers[i][j]);

numbers[i][j] 永远不会得到 '\n' 的值,因为当您使用 %d 时它只匹配整数>

【讨论】:

    【解决方案2】:

    改为使用 fgets() 一次获取一行, 然后使用 sscanf() 获取该行上的每个整数。

    【讨论】:

      【解决方案3】:

      在您的代码中,我怀疑您是否遇到此条件 if(numbers[i][j] == '\n')。 因此,您正在循环到最大值并存储垃圾值。 逐行读取并解析单个数字。

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 1970-01-01
        • 2017-08-23
        • 2016-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        相关资源
        最近更新 更多