Datei auslesen und in Array Speichern (C)
-
Hallo,
bin neu hier und hoffe auch im richtigem Forum.
Mein Problem: Ich habe einte Date "Textdatei.txt", die ich auslese. Da steht folgendes drin:
Start
Wort1
Wort2
Ende
genau so in dieser reihenfolge. Ich kann sie auslesen und ausgeben. Allerdings versuche ich das in ein Array zu speichern und NUR ein Wort per Zufall auszugeben. Und da stecke ich leider fest!! Hoffe ihr könnt mir helfen!!
Hier der Code:#include <stdio.h> #include <stdlib.h> #define ZEILENLAENGE 200 int main(int argc, char **argv) { FILE *datei; char puffer[ZEILENLAENGE]; char filename[100]; char worte[20][50];//Für 20 Wörter mit bis zu 50Zeichen (erstmal) printf("Bitte Pfad angeben: "); scanf("%s", filename); printf("\n"); if( (datei = fopen(filename,"r")) == NULL) { fprintf(stderr, "\n\nFEHLER:\n!! %s !!\nKann nicht g\231ffnet werden\n", filename); return EXIT_FAILURE; } while(fgets(puffer, ZEILENLAENGE, datei)) { fputs(puffer, stdout); } printf("\n\n"); return 0; }
Ich kriegs nicht hin, in der while Schleife das in ein Array zu packen. Habt ihr ein Tip??
Das 2.Problem ist, NUR ein Wort, mit (s)rand() auszugeben, das kann aber in eine andere Methode.
Hoffe ihr könnt mir helfen!! Komme da garnich mehr weiter
Dank schonmal!!MfG
Manda
-
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #define ZEILENLAENGE 200 #define ANZAHL 20 int main(void) { FILE *datei; char puffer[ZEILENLAENGE]; char filename[100]; char worte[ANZAHL][ZEILENLAENGE];//Für 20 Wörter mit bis zu 200 Zeichen int i, j; printf("Bitte Pfad angeben: "); scanf("%s", filename); printf("\n"); if( (datei = fopen(filename,"r")) == NULL) { fprintf(stderr, "\n\nFEHLER:\n!! %s !!\nKann nicht g\231ffnet werden\n", filename); return EXIT_FAILURE; } for (i = 0; i < ANZAHL; i++) if (fgets(puffer, ZEILENLAENGE, datei)) strcpy(&worte[i][0], puffer); /* oder: memcpy(&worte[i][0], puffer, strlen(puffer)+1);*/ else break; srand((unsigned)time(NULL)); fputs(&worte[rand()%4][0], stdout); // Zufällige Ausgabe (1 aus 4 Worten) return 0; }
:xmas1:
-
Hi,
Danke für deine Hilfe!!! hab noch eine kleinigkeit...ich übergebe das zufallswort an eine Funktion, "Galgenraten" das funktioniert auch soweit alles. ich kann die buchstaben einzeln raten,
ABER: das letzte zeichen wird noch mitgenommen, wie kriege ich das weg??
Bsp.:
Liste sieht so aus:
Start
Worteins
Wortzwei
Ende
Zufallswort, sagen wir mal: Wortzwei
dann starte ich Galgenraten damit und es stehen aber: --------- also ein strich mehr als buchstaben vorhanden sind.
Könnte man das letzte zeichen nicht irgendwie weg kriegen??
hoffe ich konnte mich verständlich ausdrücken
Da noch eine idee??Gruß
-
Hi!
fgets() liest Dir jeweils die gesamte Zeile einschliesslich
des Newline Zeichens ('\n') ein. Bei Dir also Wort + 1 Zeichen.
Um dieses Zeichen zu beseitigen - kleine Hilfsfunktion z. B. :char* noline(char* ptr) { int i = strlen(ptr)-1; if (ptr[i] == '\n' ) ptr[i] = 0; return ptr; } ... ... if (fgets(puffer, ZEILENLAENGE, datei)) strcpy(&worte[i][0], noline(puffer));
Dein Problem sollte gelöst sein.
MFG
:xmas1:
-
Hi,
DANKE!! jetzt tuts auch das was es tun soll!!! Hab noch mal ne andere Frage....
ich weis nicht was ich falsch mache :confused...
ich versuche nur ein wort einzulesen und in ein array zu speichern. das soll allerdings versteckt gehen, also die zeichen durch * ersetzen.
hier der Code:#define BUCHSABEN 40 char eingabe; char wort[BUCHSTABEN]; char replace = '*'; char wort[BUCHSTABEN]; char loesung[BUCHSTABEN]; printf("\nBitte Wort eingeben: "); //scanf("%s", wort); while( (eingabe = getch()) != '\n') { wort[i] = eingabe; i++; printf("*"); } strcpy(loesung,wort);
Problem: er zeigt nur * an, kann es nicht durch [enter] beenden, also das wort abspeichern.
Was mach ich falsch??MfG
Manda