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 ])


Anmelden zum Antworten