Vokabelprogramm
-
Ich möchte ein Vokabelprogramm machen,das aus einer Textdatei Vokabeln und deren Bedeutungen ausliest und abfragt.
Das erscheint zunächst recht einfach. Mit Hilfe von fscanf(...) jede Variable einzeln auslesen. In der Art dominus == Herr.
Bis jetzt ist alles wunderbar.Wenn ich jetzt aber z.B ein Wort mit 2 oder gar 3 Bedeutungen habe wird die Sache schon schwieriger (somnus == Schlaf,Traum)
Jetzt könnte man das ganze ,mit unzähligen if und else if und else abfragen.
Gibts da keinen anderen Weg ?
-
Dieser Thread wurde von Moderator/in flenders aus dem Forum WinAPI in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
arrays oder direkt den split und Schleifen drüber laufen lassen.
dann hast du nur einen Vergleich.
-
weil ich im erklären nicht so gut bin wie im programmieren, hier mal ein beispielprogramm:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define VOKABEL_ANZAHL_MAX 1000 #define VOKABEL_LAENGE_MAX 100 /* ich machs jetzt mal statisch damits */ /* nicht zu kompliziert wird ;) */ char vokabeln[VOKABEL_ANZAHL_MAX][VOKABEL_LAENGE_MAX]; int vokabel_anzahl; void fatal (char *text) /* eine fehlerbehandlungs-routine macht das leben leichter */ { perror(text); exit(1); } void vokabeldatei_einlesen (char *dateiname) { FILE *fp; fp=fopen(dateiname,"r"); if(fp==NULL) fatal(dateiname); vokabel_anzahl=0; while(fgets(vokabeln[vokabel_anzahl],VOKABEL_LAENGE_MAX,fp)!=NULL) { /* von fgets() miteingelesenes new-line-zeichen entfernen */ vokabeln[vokabel_anzahl][strlen(vokabeln[vokabel_anzahl])-1]='\0'; vokabel_anzahl++; } fclose(fp); } void vokabeln_ausgeben (void) { int i; for(i=0; i<vokabel_anzahl; i++) printf("%s\n",vokabeln[i]); printf("Anzahl der Vokabeln: %d\n",vokabel_anzahl); } int vokabel_ist_korrekt (int vokabel_nummer, char *eingabe) { char *vzeile=strdup(vokabeln[vokabel_nummer]), /* nötig, da strtok() in */ *wort; /* den string schreibt */ int ergebnis=0; strtok(vzeile," "); /* initialisieren und erstes wort überlesen */ while(wort=strtok(NULL," ")) /* alle bedeutungen testen */ if(strcmp(eingabe,wort)==0) { ergebnis=1; break; } free(vzeile); return ergebnis; } void vokabel_abfragen (int vokabel_nummer) { char vokabel[VOKABEL_LAENGE_MAX], eingabe[VOKABEL_LAENGE_MAX]; sscanf(vokabeln[vokabel_nummer],"%s",vokabel); for(;;) /* endlosschleife */ { printf("\nWas bedeutet %s? ",vokabel); scanf("%s",eingabe); if(vokabel_ist_korrekt(vokabel_nummer,eingabe)) { printf("Richtig!\n"); break; } printf("Falsch!\n"); } } void main (int atgc, char **argv) { vokabeldatei_einlesen("c:\\vokabeln.txt"); vokabeln_ausgeben(); srand(0); /* zufallsgenerator initialisieren */ for(;;) /* endlosschleife */ vokabel_abfragen(rand()%vokabel_anzahl); }
die vokabeldatei hat ein anderes format als du es vorgeschlagen hast. nämlich
somnus Schlaf Traum
anstelle von
somnus == Schlaf,Traum
.
-
Konfusius : Kannst du villeicht dein programm so ändern, dass man ganz oben nicht die vokabeln sieht ( nicht auf deutsch und auch nichtauf englisch ) ???
-
du mußt nur in main() den aufruf der funktion vokabeln_ausgeben() entfernen. habe diesen aufruf nur zu testzwecken drin und vergessen, ihn zu entfernen
-
Ähm ... ich wollt deinen codebenutzen ( wen du nichts dagegen hast ) , aber ich hab noch eine frage zu dem "speicherplatz"
c:\\vokabeln.txt ...
kann man in so eiem pfad variablen einfügen?? (z.B c:\\vokabeln\\x\\y [x und y sollen eien variable sein ])