Problem: Unterschiedliche Strings mit einer Funktion abfragen



  • Erstmal Hallo,

    ich habe ein Problem, denn ich möchte ein Abfrageprogramm schreiben. Das Problem ist nur, dass ich für jedes Wort, das ich abfrage, nochmal eine Schleife einfügen muss. Das sieht flogendermaßen aus:

    int Bsp(int argc, char *argv[])
    {
      const char Bedeutung01[] = "";
      const char Vokabel01[] = "";
      const char Bedeutung02[] = "";
      const char Vokabel02[] = "";
      char Eingabe[31];
      int versuche = 2;
      for(;;)
      {
          printf("%s: ", Bedeutung01);
          scanf("%s", Eingabe);
          if (versuche == 0)
          {
                       printf("Keine Versuche mehr!\n Die Loesung lautet: %s!\n", Vokabel01);
                       break;
          } else {
                 if (strcmp(Vokabel01,Eingabe) != 0)
                     {
                     printf("Falsch! Noch %d Versuch(e)!\n", versuche);
                     versuche = versuche - 1;
                     } else {
                     printf("Richtig!\n");
                     break;
                     }
          }
      }
      versuche = 2;
      for(;;)
      {
          printf("%s: ", Bedeutung02);
          scanf("%s", Eingabe);
          if (versuche == 0)
          {
                       printf("Keine Versuche mehr!\n Die Loesung lautet: %s!\n", Vokabel02);
                       break;
          } else {
                 if (strcmp(Vokabel02,Eingabe) != 0)
                     {
                     printf("Falsch! Noch %d Versuch(e)!\n", versuche);
                     versuche = versuche - 1;
                     } else {
                     printf("Richtig!\n");
                     break;
                     }
          }
      }
    }
    

    So ist das ja ziemlich blöd, weil ich für jede neue "Vokabel" (hab ich jetzt mal für das Bsp. genommen) eine Schleife einfügen muss. Ich programmier noch nicht solange und hab keine Ahnung, wie man des besser machen könnte!

    Wieß jemand Rat?

    (Ich hoffe, ich hab alles richtig gemacht, was das Forum betrifft!)



  • Wenn du das beliebig oft durchführen willst brauchst du eine while-Schleife und eine Frage, ob noch eine Schliefe gemacht werden soll.

    char antwort[1];
    
    printf("Noch eine Schleife? (j/n)");
    scanf("%s", &antwort[0]);
    while(antwort == 'j');
    { // hier kommt das rein was du immer wieder wiederholen willst
      printf("Noch eine Schleife? (j/n)");
      scanf("%s", &antwort[0]);
    }
    

    Wenn du die Nummer der jeweiligen Schleife mit angeben willst erzeugst du eine Zählervariable, die bei jedem neuen Schliefendurchgang um 1 inkrementiert wird. Also z.B. mit i als Zählervariable:

    int i; 
    
    i=i+1;
    


  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct _eintrag{
    	char *bedeutung;
    	char *vokabel;
    }eintrag;
    
    int main(void) {
    	eintrag liste[]={
    			{"hallo","hello"}
    			,{"welt","world"}
    			,{"noob","lolo"}//:)
    			//... hier kannst du einfach neue werte einfuegen
    			//alles passt sich automatisch an
    			// ,{"bedeutung","vokabel"}
    	};
    	int l = sizeof(liste)/sizeof(eintrag);
    	char eingabe[1024];
    	int versuche = 3;
    	int richtig = 0;
    	int falsch = 0;
    
    	while(l--){
    //bei einer falscheingabe wollen wir hier hin
    //das ist das label zu dem "goto LABEL_NEXT_TRY;"
    LABEL_NEXT_TRY:
    		printf("%s: ",liste[l].bedeutung);
    		//wir lesen eine ganze zeile
    		fgets(eingabe,1000,stdin);
    		//am ende der zeile ist ein '\n' das machen wir weg
    		eingabe[strlen(eingabe)-1] = '\0';
    		if(strcmp(eingabe,liste[l].vokabel)==0){
    			printf("Richtig!\n");
    			richtig++;
    		}else{
    			versuche = versuche - 1;
    			if(versuche == 0){
    				printf(
    					"Keine Versuche mehr!\n Die Loesung lautet: %s!\n"
    					,liste[l].vokabel
    				);
    				versuche = 3;
    				//falsch++ ist das gleiche wie
    				//falsch = falsch + 1;
    				falsch++;
    			}else{
    				printf("Falsch! Noch %d Versuch(e)!\n", versuche);
    				goto LABEL_NEXT_TRY;
    			}
    		}
    	}
    	printf(
    		"\n----------------------------------------"
    		"\nrichtig:  %11d"
    		"\nfalsch:   %11d"
    		"\ningesamt: %11d"
    		,richtig
    		,falsch
    		,richtig+falsch
    	);
    
    	return 0;
    }
    

    hoffe das ist jetzt nicht zu tricky 😉

    lg lolo



  • Vielen Dank, genau das hab ich gesucht!
    (Gibt's hier so was wie nen Danke-Knopf?)


Anmelden zum Antworten