C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array
-
Hi Leute!
Ich möchte gerne eine Simulation einer Tankstelle für die Schule programmieren. Dafür habe ich die Zeichnung eines Autos im Ordner wie die .c Datei. Wie bekomme ich diese Zeichnung in ein Zweidimensionales Char Array. Hier mein Versuch:int i = 0; int x = 0; int y = 0; char c = ' '; FILE *fp; fp = fopen("car.txt", "r"); for (i = 0; i < 10; i += 1) { x = 0; y = 0; arr[i].drives = 0; arr[i].x = 0; arr[i].y = 0; arr[i].fuel = 0; arr[i].maxfuel = 40; arr[i].lane = 0; arr[i].starttime = 0; while (c != EOF) { c = fgetc(fp); if (c != 'n') { arr[i].look[x][y] = c; x += 1; } else { y += 1; } } } fclose(fp);
Hier habe ich ein Array mit der Länge 10 wo ich Autos drine habe (mit einem struct). Jedes Auto soll sozusagen synchronisiert werden, also soll Anfangswerte usw. bekommen. Das 2DM-Array Look soll hierbei das Aussehen des Fahrzeuges beeinhalten. Danke im Vorraus. Lg
-
=`-()--()-' m
@ @ Â ³
░ ñ
÷ 1 mP @ n
_ _\ Ç ³á
Das kommt als Ergebnis raus und ich höre irgendeinen Ton
-
@Lockna sagte in C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array:
Das kommt als Ergebnis raus und ich höre irgendeinen Ton
wie sieht die Datei aus, wenn du sie in einem Editor öffnest.
Wo kommt die Ausgabe und der Ton her?Meinst du in Zeile 25 '\n' ?
Es ist auch blöd, weiter aus einer Datei zu lesen, wenn EOF erreicht wurde (das sollte schon passieren, wenn i noch 0 ist).
-
@DirkB Ich habe zuerst versucht es in einer Zeile und mit n, anstatt \n zu lösen.
So sieht die Text-Datei jetzt aus______ /|_||_\\`.___ ( _ _ _\\ =`-(_)--(_)-'
und wie while-Schleife dazu:
c = fgetc(fp); while (c != EOF) { c = fgetc(fp); if (c != '\n') { arr[i].look[x][y] = c; x += 1; } else { arr[i].look[x][y] = NULL; y += 1; x = 0; } }
sollte ich am ende der for-schleife ein rewind(fp) machen?
-
@Lockna wenn dein Array look groß genug ist, kannst du auch die Standardfunktion
gets
nehmen.Wozu rewind.
Wenn du denselben look haben willst, kopiere im Speicher mitmemcpy
-
@DirkB Ok, werde ich gleich versuchen
-
@DirkB Ne hab ich versucht, hat aber nichts gebracht. Mit rewind wollte ich sozusagen den FilePointer zum Anfang der File resetten
-
@Lockna und dann?
Du würdest 10x den Inhalt der Datei einlesen.
Klappt das denn zumindest beim ersten Auto?
Wie ist denn die struct deklariert?
-
wie wäre es mit fread zum einlesen?
@Lockna sagte in C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array:
arr[i].look[x][y] = NULL;
wtf!
-
@DirkB Ne, funktioniert nicht mal beim ersten Auto. Mein Kollege hat jetzt müseligerweise das Auto einzeln in das 2DM-Array gespeichert. Also Index für Index
typedef struct { int drives; //1=wenn auto unterwegs int x; int y; int starttime; int fuel; int lane; int maxfuel; char look[20][4]; // Aussehen des PKWs } car;
-
@Wade1234 Haben wir auchschon versucht. Wir haben das NULL mit 'r' ersetzt und jetzt wird alles != 'r' geprintet.
-
@Lockna sagte in C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array:
Also Index für Index
Man kann struct auch initialisieren, d.h. bei der Definition gleich Werte zuweisen. Auch als Array.
Sonst geht auch noch
strcpy
odermemcpy
-
@Lockna sagte in C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array:
@Wade1234 Haben wir auchschon versucht. Wir haben das NULL mit 'r' ersetzt und jetzt wird alles != 'r' geprintet.
hä? NULL ist eine adresse, die hat in zeichenketten nichts zu suchen!
-
@Lockna sagte in C: Speichern einer Auto-Zeichnung aus File in ein Zweidimensionales Char Array:
______ /|_||_\\`.___ ( _ _ _\\ =`-(_)--(_)-'
das ist ein Auto?
-
@DirkB Wie kann man gleich initalisieren? Haben wir schon versucht, aber der Compiler hat uns immer einen Fehler ausgespuckt
-
@Lockna ich weiß doch auch nicht. Wenn Du weißt wie groß das Ding ist kannst mit
fgetc()
ganz stupid lesen und in dein array schreiben. wenn du nicht weißt wie groß das ding ist wird es lustiger. also - welches Schweinderl hätten's gern?
-
@Swordfish Mehr oder weniger ^^
-
@Lockna *kopfschüttel* dann machs mehr oder weniger dynamisch ^^
-
@Swordfish Was meinsten jetzt damit? Dynamisch?
-
wenn du nicht weißt wie groß das ding werden kann dann nix möglich mit statischer größe. wenn du es weißt einfacher.