2016-03-22 16 views
0

Im folgenden Code versuche ich, Char von Char aus einer Datei zu lesen und jedes Zeichen in einem zweidimensionalen Array zu speichern. Danach möchte ich mit seinen Koordinaten (i und j) jedes Zeichen in dem Array drucken:C Drucken eines Arrays aus zwei Dimensionen

#include <stdio.h> 
#pragma warning(disable:4996) 
int main(){ 

    char grid[3][5]; 
    FILE *file; 
    file = fopen("input.txt", "r"); 
    int c; 

    if (file == NULL){ 
     perror("Error in reading the file"); 
    } 
    else{ 
     int j=0; 
     for (int i = 0; i < 3; i++) 
     { 
      while (j<5) 
      { 
       grid[i][j] = fgetc(file); 
       j++; 
      } 
      j = 0; 
     } 
    } 

    int length = sizeof grid/sizeof grid[0][0]; 
    for (int i = 0; i < 3; i++) 
    { 
     for (int j = 0; j < 5; j++) 
     { 
      printf("%c %d %d \n", grid[i][j], i, j); 

     } 
    } 
    printf("\n"); 
    return 0; 
} 

Die Datei, die ich von Blicken lesen wie:

ABCDE 
FGHIJ 
KLMNO 

möchte ich das Ergebnis wie zu sein :

A 0 0 
B 0 1 
... 

Aber die wirklichen Ergebnisse, die ich habe ist:

A 0 0 
B 0 1 
C 0 2 
D 0 3 
E 0 4 

1 0 
F 1 1 
G 1 2 
H 1 3 
I 1 4 
J 2 0 

2 1 
K 2 2 
L 2 3 
M 2 4 

Wie Sie sehen können, wird die zweite Zeile mit einem Leerzeichen zuerst und das gleiche mit der dritten Zeile gedruckt. Außerdem werden die letzten beiden Buchstaben N und O nicht gedruckt. Kann mir jemand helfen, dieses Problem zu lösen?

+2

Sie lesen zwei '\ n's als Zeichen, die die letzten beiden Elemente Ihres' char' Array herausdrückt. –

+0

Ändern Sie den Inhalt Ihrer Datei in 'ABCDEFGHIJKLMNO' und es sollte ordnungsgemäß funktionieren. –

Antwort

2

Ändern dieses Stück Code

for (int i = 0; i < 3; i++) 
{ 
    while (j<5) 
    { 
     grid[i][j] = fgetc(file); 
     j++; 
    } 
    j = 0; 
} 

Um in einer if-Anweisung hinzufügen, die sicher den Charakter es in lesen machen werden prüfen, ist kein Newline-Zeichen \n. Der fertige Code wird wie folgt aussehen:

for (int i = 0; i < 3; i++) 
{ 
    while (j<5) 
    { 
     char c = fegetc(file); 
     if(c != '\n') 
     { 
      grid[i][j] = fgetc(file); 
      j++; 
     } 
    } 
    j = 0; 
} 

Fiddling Bits vorgeschlagen, dass die innere Schleife zu einem for-Schleife geändert werden (zur besseren Lesbarkeit). Ich würde zustimmen, aber es hat den Nachteil, in den sonst Teil der if-Anweisung zu setzen, im Gegensatz zu nicht einmal eine else-Anweisung. Sie können das obige Update und dieses Update anzeigen, indem der innere Loop in eine for-Schleife geändert wird, und entscheiden, welche Version in diesem Fall die beste Lesbarkeit aufweist. Dieser Code stellt diese Änderung sowie die Behebung für das Anfangsproblem dar:

+1

Eine 'for'-Schleife anstelle einer' while'-Schleife wäre auch sauberer. –

+0

@FiddlingBits Ich stimme zu. Ich werde den Code bearbeiten, um das darzustellen. Danke für den Hinweis. –

+0

Ich habe geändert, was Sie erwähnt haben, aber nicht funktioniert – Nasser

0

Versuchen Sie, ein weiteres Fgetc (Datei) hinzuzufügen; nach dem j = 0; (Ohne Zuordnung). Es wird die neue Zeile Char aus Ihrer Datei ziehen

Verwandte Themen