2017-03-26 25 views
0

所以我有这个简单的程序,它读取文件中的值,然后我只是想将它们打印到屏幕上。数组打印到屏幕时发生问题。它在数组中间添加了一些随机数。有人有一个想法是什么问题?从文件读入二维数组会返回C中的错误值?

这里是输出: enter image description here

这里是我的代码:

#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文件: enter image description here

+1

请剪切并粘贴文本。不是图片 –

+0

删除'fscanf'格式字符串中的'\ t'。 '%d'格式自动跳过前导空格,但是你要求'\ t'被满足。什么是奇怪的'if(numbers [i] [j] =='\ n')i ++'for?你的意思是“休息”吗?为什么当你打破内循环时不应该有随机数字? char数字[MAXROW] [MAXCOL];'*未初始化*。 –

+0

尝试在char数字中将'char'更改为'int';如果可行,我有一个答案。如果没有,我不知道。 –

回答

1

你的循环改为

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

号[i] [j]将永远不会得到值 '\ n',因为它只有当你使用%d

匹配整数
+0

是的,没错。谢谢! –

0

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

0

在你的代码中,我怀疑你是否碰到这种情况if(numbers [i] [j] =='\ n')。 所以,你循环到最大值&存储垃圾值。 逐行读取&解析它为单个数字。