Einfaches "Buchstabenraten"-Programm, kleiner Fehler



  • Hi,

    ich habe mir ein Programm geschrieben, welches den Benutzer 3 Versuche gestattet den vorher vom Programmierer definierten Buchstaben durch eine einfache Eingabe zu erraten:

    #include <stdio.h>
    
    #define Anzahlversuche 3
    #define Buchstabe 'k'
    
    main() {
           char Eingabe;
           int Versuch=0;
           printf("Sie haben drei Versuche den richtigen Buchstaben zu erraten");
    
           while(Versuch<=Anzahlversuche && Buchstabe!=Eingabe)
             {
    
                                           printf("\n\nEingabe\t");
                                           scanf("%c",&Eingabe);
    
                                                                if(Eingabe==Buchstabe)
                                                                                      {
                                                                                      printf ("\n Richtig geraten der Buchstabe war\t%c!",Buchstabe);
    
                                                                                      }
                                                                                      else
                                                                                      {
                                                                                      printf("Falsch geraten!");
                                                                                      Versuch++;
    
                                                                                      }
                                                                }
            {
                printf ("\n\nBeliebige Taste druecken um Programm zu beenden");
                }
    
           getchar();
           getchar();
    
           return 0;
           }
    

    Problem ist jetzt nur folgendes:

    Wenn man einen falschen Buchstaben eingegeben hat, durchläuft er die while Schleife scheinbar 2 mal mit einer Eingabe.

    Das heisst, dass ich als Ergebnis bei einer falschen Eingabe folgende Zeilen in der cmd angezeigt bekomme:

    Eingabe x
    Falsch geraten!
    
    Eingabe Falsch geraten!
    
    Eingabe
    

    obwohl sie lauten sollte

    Eingabe x
    Falsch geraten!
    
    Eingabe
    

    Bei richtiger eingabe funktioniert das Programm wie gewünscht.

    Ich hoffe mir kann jemand helfen.
    Gruß Simon



  • Hi,
    die Schleife wird real 2 mal durchlaufen. Das liegt an dem '\n' Zeichen, das die Funktion im Puffer lässt. Das ist aber nicht weiter tragisch, das lässt sich entfernen.
    Guckst du Code:

    #include <stdio.h> 
    
    #define Anzahlversuche 3 
    #define Buchstabe 'k' 
    
    int main()
    { 
    	char Eingabe = 0;
    	int Versuch = 0; 
    	puts ( "Sie haben drei Versuche den richtigen Buchstaben zu erraten." ); 
    
    	while ( Versuch < Anzahlversuche ) 
    	{ 
    		printf ( "Eingabe: " ); 
    		scanf ( "%c", &Eingabe );
    		if ( Eingabe == Buchstabe )
    		{
    			puts ( "Richtig geraten!" );
    			break;
    		}
    		puts ( "Falsch geraten!" );
    		Versuch++; 
    		// Entfernt das '\n' und evtl. noch andere vorhandene Zeichen aus dem Eingabepuffer.
    		while ( ( Eingabe = getchar() ) != EOF && Eingabe != '\n' );  
    	} 
    	return 0; 
    }
    

    Gruß,
    B.B.



  • Vielen dank schon mal.

    der Befehl "puts" stammt aus c++?

    while ( ( Eingabe = getchar() ) != EOF && Eingabe != '\n' );
    

    Was bewirkt diese Zeile genau?

    !=EOF && Eingabe !='\n'); im speziellen

    Gruß Simon



  • puts ( put string ) ist eine C Funktion. -
    Die while Schleife sorgt dafür, das der Eingabepuffer leergemacht wird. Es werden so lange Zeichen in die Variable Eingabe eingelesen, bis diese entweder ein EOF oder ein '\n' enthält. Damit ist der Puffer leer und die while Schleife wird abgebrochen.

    Gruß,
    B.B.


Anmelden zum Antworten