2017-03-26 20 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')。 所以,你循環到最大值&存儲垃圾值。 逐行讀取&解析它爲單個數字。