zweidimensionales Array funzt nicht
-
Hi,
ich möchte gerne ein zweidimensionales Array füllen. Und zwar soll er nachdem er 450 Zeichen gelesen hat, in die nächste Zeile springen und sie wieder von links nach rechts auffüllen.
ungefähr so: array =
{ {h0/z0,h0/z1,h0/z2,h0/z3,h0/z4},
{h1/z0,h1/z1,...................},
{h2/z0,.........................},
{h3/z0,.........................}};So ähnlich müsste es doch funktionieren...
Aber mein Programm stürzt immer ab.mfg max
int h=0; int z=0; if (h <= 450) { for(z=0; z<=450; z++) fscanf(input,"%s",header.data[h][z]); z++; if (z == 451) { h++; z=0; } }
-
Mit %s liest Du keine 450 Zeichen, sondern 450 Strings.
Die for-Schleife enthält nur eine Zeile (fscanf).
Mit z=450 bist Du noch in der Schleife, mit z=451 wird sie verlassen, dann inkrementierst Du nochmals. Damit steht z schon bei 452
Anstatt if (h<=450) müßte es wohl while (h<=450) heißen.
-
ok danke,
aber wenn zwischen Zahlen/Buchstaben immer ein Leerzeichen ist, dann ist die Zahl/Buchstabe doch ein einzelner string, oder?
zb.: 00 03 0b 06 111
Wären das 5 strings?
mfg max
-
also hab jetz ein bissl was geändert, aber das Programm bricht noch immer ab.
Es funktioniert alles, bis zu dieser Schleife.typedef struct { char type[3]; char comment[ZEILENLAENGE]; char width[4]; char height[4]; char greyscale[4]; char data[450][450]; } Header;
Header header; int h=0; int z=0; while (h <= 450) { for(z=0; z<=450; z++) fscanf(input,"%d",header.data[h][z]); printf("data: %d\n",header.data[h][z]); if (z == 450) { h++; z=0; } }
-
Du könntest z.B. 'nen simplen Overhead miteinbauen:
scanf( "%[^\n]s", zeiger_auf_array );
Jetzt ist das natürlich nicht die beste Methode
Empfehlenswert ist hier wohl die fgets-Funktion zu benutzen:
fgets( zeiger_auf_array, anzahl_der_eionzulesenden_zeichen, stdin );
Grüße hando
-
thx, aber ich verstehs nicht ganz. Bin Anfänger in Sachen programmieren.
fgets liest mir doch die ganze Zeile ein und keine einzelnen Zeichen, oder?
Und ich muss aber Zahlen einlesen die durch ein " " voneinander getrennt sind.
Jede Zahl sollte auch ein eigenes Feld im Array haben.Für eine Breite von 450 Zeichen und einer Höhe von 450 müsste es doch so aussehen:
typedef struct { char type[3]; char comment[ZEILENLAENGE]; char width[4]; char height[4]; char greyscale[4]; char data[450][450]; } PGMHeader;
while (h <= 450) { for(z=0; z<=450; z++) fgets(&header.data[h][z] , 450, input ); printf("data: %d\n",header.data[h][z]); if (z == 450) { h++; z=0; } }
-
fscanf(input,"%d",header.data[h][z]);
Wenn du "%d" verwendest, dann muß der Parameter von fscanf() ein Zeiger auf ein int sein. Du übergibst aber ein char. Richtig wäre
int x; fscanf(input,"%d",&x); header.data[h][z]=x;
Direkt &header.data[h][z] an fscanf() zu übergeben geht nicht, weil das dann ein Zeiger auf ein char wäre.