2013-09-22 5 views
-1

Я пытался хранить матричный ввод в текстовом файле в массиве, но он показывает мне своеобразный вывод. Это код:Прочитайте матрицу из текстового файла и сохраните ее в массиве 2D

#include <stdio.h> 

int main() 
{ 
    int c, i, j, row, col, nl, cr; 

    row = col = nl = cr = 0; 

    FILE *fp = fopen("g.txt", "r"); 

    // Figure out how many rows and columns the text file has 
    while ((c = getc(fp)) != EOF) 
    { 
     if (c == '\n') 
      nl++; 
     if (c == '\r') 
      cr++; 

     col++; 

     if (c == '\n') 
      row++; 

     putchar(c); 
    } 

    col = (col - (nl + cr)); 
    col = (int) (col/row); 

    // printf("\nnumber of rows is %d\n", row); 


    // read letters into array 

    char array[row][col]; 

    if (fp) 
     { 
     for (;;) 
       { 
      c = getc(fp); 
       if (c == EOF) 
       { 
         break; 
       } 
       if (c != '\n' && c != '\r') 
       { 
         array[i][j] = c; 

        if (++j >= col) 
         { 
          j = 0; 
          if (++i >= row) 
          { 
           break; 
          } 
         } 
       } 
      } 
     fclose(fp); 
    } 

    for (i = 0; i < row; i++) 
    { 
      for (j = 0; j < col; j++) 
      { 
       putchar(array[i][j]); 
      } 
      putchar('\n'); 
    } 
    return 0; 
} 

Пример файла данных:

255 50 9 50 1 50 50 1 
50 255 50 50 50 50 50 50 
50 50 255 50 50 50 50 50 
8 50 50 255 50 50 50 50 
50 50 50 50 255 50 50 50 
50 50 50 50 50 255 50 50 
1 50 50 50 50 50 255 50 
2 50 50 50 50 50 50 255 

Моя программа показывает мне этот выход:

255 50 9 50 1 50 50 1 
50 255 50 50 50 50 50 50 
50 50 255 50 50 50 50 50 
8 50 50 255 50 50 50 50 
50 50 50 50 255 50 50 50 
50 50 50 50 50 255 50 50 
1 50 50 50 50 50 255 50 
2 50 50 50 50 50 50 255  $■(1gÍuáþ09■ ı¤ıu"ÒávD ê$[ 
► ð²( ♥  l ►  ■ 
    ê$[ ♥ l  ­²(O»ƒv[ 4■(Qõá 
v♥ #õáv┬²║Oÿ|®v ñ|®ve┬ív 
■( x■(ÿ|®v Ó²⌂ @■( áƒv╚♀[ L 
■(w¯ƒv‼ ê■(I┴ávÿ|®v↓┴áv~²║O 
    Ó²⌂ \■(■ ─ (e┬ívÍ┬29►☺ 

для входного файла, показанного, но проблема для вывод массива я не понимаю, почему он показывает мне эти персонажи.

+0

Я уверен, что эта строка: 'char array [row] [col];' не может компилироваться, массив, объявленный в стеке, должен иметь фиксированный размер. – Michael

+0

Возможный дубликат [Чтение из текстового файла и сохранение в 2D-массиве] (http://stackoverflow.com/questions/18942719/reading-from-a-text-file-and-storing-in-a-2d- массив) –

+1

[это] (http://imgur.com/gwioITt). Вы работаете над тем же заданием? Или это учетная запись? –

ответ

0

Как об этом: -

#include <stdio.h> 
void main() 
{ 
FILE *fopen(), *fp; 
char c; 
int i=0,j=0; 
char file[50][50]; 
fp = fopen("abc.txt","r"); 
c = getc(fp) ; 
while (c!= EOF) 
{ 
file[i][j]=c; 

    j++; 
    c = getc(fp); 

    if(j==50){ 
    i++; 
    j=0; 
    } 
} 
fclose(fp); 
} 
+0

@ rahul Я уже тестировал этот код, он не работает, вы можете проверить мой код, пожалуйста, у меня есть проблема с отображением массива – Butterflay

+0

@Butterflay: - Вы проверили решение, данное в этом: - http://stackoverflow.com/questions/18942719/чтение-из-файла-файла-и-хранения-в-2d-массива ???? –

+0

это я, и это то же самое – Butterflay

2

комментарий Майкла правильно, я был бы удивлен, если это даже компилирует. Вы должны будете выделить свой массив динамически, например, так:

char **array = malloc(sizeof(char *) * row) 

И каждая строка, как:

array[c] = malloc(sizeof(char) * col)

Вы должны освободить каждую строку и массив с бесплатным, а также.

Похоже, вы пытаетесь читать и хранить целочисленные значения. Имейте в виду, что когда вы это сделаете, вам все равно придется преобразовать значения символов, если это так.

Смежные вопросы