flogy92
Mitglied
Hallo zusammen!
Ich sitze hier gerade an einer C-Übung. Dabei soll ich unter anderem eine Datei auslesen und die Werte einzeln in einen zweidimensionalen Array speichern.
Diese Datei ist so aufgebaut, dass jede Zeile dieselbe Breite (also Anzahl Zeichen) hat. Mir ist ebenfalls schon bekannt, wieviele Zeilen es total sind.
Das Auslesen und Ausgeben hat prima geklappt. Nur habe ich das Problem, dass manchmal seltsame Werte ausgegeben werden; und zwar die Zahl -38! Nach einigen Tests ist mir aufgefallen, dass -38 immer genau nach 80 weiteren Zeichen wieder ausgegeben wird. Im Array sieht das etwa so aus:
data[0,0] = -38 //seltsamer Wert
data[1,0] = 0 //korrekter Wert
...
data[1,0] = 0
data[1,1] = -38
data[1,2] = 0
...
data[2,0] = 0
data[2,1] = 0
data[2,2] = -38
data[2,3] = 0
...
Und hier mein Code:
Wenn ihr etwas nicht versteht, bitte umgehend fragen! Es ist nämlich ziemlich kompliziert, das Problem zu beschreiben.
Vielen Dank für eure Antworten!
MfG flogy92
Ich sitze hier gerade an einer C-Übung. Dabei soll ich unter anderem eine Datei auslesen und die Werte einzeln in einen zweidimensionalen Array speichern.
Diese Datei ist so aufgebaut, dass jede Zeile dieselbe Breite (also Anzahl Zeichen) hat. Mir ist ebenfalls schon bekannt, wieviele Zeilen es total sind.
Das Auslesen und Ausgeben hat prima geklappt. Nur habe ich das Problem, dass manchmal seltsame Werte ausgegeben werden; und zwar die Zahl -38! Nach einigen Tests ist mir aufgefallen, dass -38 immer genau nach 80 weiteren Zeichen wieder ausgegeben wird. Im Array sieht das etwa so aus:
data[0,0] = -38 //seltsamer Wert
data[1,0] = 0 //korrekter Wert
...
data[1,0] = 0
data[1,1] = -38
data[1,2] = 0
...
data[2,0] = 0
data[2,1] = 0
data[2,2] = -38
data[2,3] = 0
...
Und hier mein Code:
Code:
i = 1;
char data[b][h];
int z = 1, r = 1; //Zeichen, Zeile
while ((c = fgetc(datei)) != EOF)
{
data[z][r] = (c - '0'); //Zeichen in einen Array speichern (als integer)
if (r < 6) //dient nur der Beschränkung der Ausgaben, damit nicht gleich alles auf einmal ausgegeben wird
{
printf("%i auf %i, %i\n", data[z][r], z, r); //Das eingelesene Zeichen ausgeben
}
if (i % b == 0) //Wenn der Zähler i durch die Breite b einer Zeile ohne Rest teilbar ist (bzw. die zeile zu ende ist), soll zu der Row-Zahl r eins addiert,
{
r += 1;
z = 0; //und gleichzeitig der Zeichenzähler z wieder auf Null gesetzt werden
}
z += 1;
i += 1;
}
Wenn ihr etwas nicht versteht, bitte umgehend fragen! Es ist nämlich ziemlich kompliziert, das Problem zu beschreiben.
Vielen Dank für eure Antworten!
MfG flogy92
Zuletzt bearbeitet: