C - Werte aus Datei in int Array speichern

Manda

Erfahrenes Mitglied
Hallo zusammen,
ich versuche Werte aus einer Datei auszulesen und in ein int-Array[][] zu speichern. Diesen anschließend wieder ausgeben.

Textdatei (ohne Leerzeichen):
530070000
600195300
098000060
800060003
400803001
700020006
060000280
000419005
000080079

C++:
void main(void)
{
   FILE *fp = NULL;
   int matrix[9][9];
   int i,j,z;

   fp = fopen("test.txt","r");
   for ( i=0; i<10; i++ ) //Hier muss ich auch bis 10 laufen um ALLE Werte zu kriegen
   {
      for ( j=0; j<10; j++ )
      {
         z = fgetc ( fp );                
         if ( z == EOF )
         {
            i = 10;
            break;
         }
         printf ( "|%c", z );   //1. Ausgabe ist ok!            
         matrix[i][j] = z;                
     }
   }

//gleich danach die Ausgabe:
   for(i=0; i<9; i++)
   {
    for(j=0; j<9; j++)
    {
       printf(" |%d ", matrix[i][j]);//2. Ausgabe leider andere Werte
    }
    printf("\n");
   }
}
1.Ausgabe ist korrekt
2.Ausgabe gibt leider ganz andere Werte aus.

Liegt es vielleicht an dem " %c " beim einlesen? Da ich ein Zeichen einlese und in eine int matrix speichere?
Speichern wollte ich sie eigentlich auch gerne in die int matrix.

Gruß
Manda
 
Moin,

im ersten Fall (mit %c) gibt Du den Wert als "single byte character" aus, im anderen Fall (%d) als "signed decimal integer" ...

Nimm' doch einfach an der zweiten Stelle auch %c :p

Was genau kommt denn dort derzeit

Gruß
Klaus
 
hmmm also 1. fehler ist das du ein char in ein intfeld schreiben willst ...
das geht nur bedingt also dadurch kommt dieser kram zustande
hierfür gibt es funktionen die mir grad net einfallen :)
du musst auf alle fälle den char in ein int casten

als nächstes :
in deiner datei steht folgendes drin:
9 x zahl + 1 mal zeilenumbruch ... daher musst die dieses eine zeichen mehr machen
besser wäre es wenn du ne if abfrage auf "newline" (\n) machst und dann dein i erhöhst
 
Hi.

Ja, es liegt an dem %c Format. Du liest dort ein Zeichen ein, und der Wert von '5' laut ASCII Tabelle ist nunmal 53.

C:
matrix[i][j] = z - '0';
Gruß

PS: Das solltest du aber nur machen wenn du mit isdigit() geprüft hast ob es auch wirklich eine Ziffer ist (die Zeilenendezeichen \n\r und diverse Leerzeichen könnten ja auch drin sein).
 
Zuletzt bearbeitet:
Danke an alle!
Ich dachte ich müsste Zeichen für Zeichen einlesen, darum benutze ich fgetc(). Wie könnte ich denn anders die Werte in das int Array speichern?

@vfl_freak - Das %d mit %c zu ersetzen gibt dann das richtige Ergebnis aus.;)

@deepthorat: Ich hab leider noch nicht ganz verstanden, wo du diese Code-Zeile bei mir ersetzen wolltest?
C++:
 matrix[i][j] = c - '0';

@LordTerra: das mit casten hatte ich versucht. Habs irgendwie dann doch nicht hinbekommen. Dann habe ich es so gelassen.

Verständnis Frage noch:
Wären die Werte, wenn sie denn in der Matrix gespeichert wären, jetzt int-Werte?

Gruß
Manda
 
@deepthorat: Ich hab leider noch nicht ganz verstanden, wo du diese Code-Zeile bei mir ersetzen wolltest?
C++:
 matrix[i][j] = c - '0';
Na, da wo du die Zuweisung an die matrix Variable machst (Zeile 19). c muss natürlich z sein - hab ich in meinem Beitrag schon bearbeitet. (aber beachte den isdigit() Hinweis)
Wären die Werte, wenn sie denn in der Matrix gespeichert wären, jetzt int-Werte?
Ja, natürlich - es ist doch ein int Array.

Gruß
 
Zurück