Eingabeproblem



  • Hallo,

    ich habe ein kleines Problem und sehe gerade nicht wie ich das lösen kann.
    Mein Programm erzeugt eine Zufallszahl zwischen 1 und 100 und der Nutzer hat dann 8 Versuche die Zahl zu erraten.

    Dabei soll überprüft werden, ob die eingegebene Zahl vom Nutzer korrekt ist (also zwischen 1 und 100). Wenn nicht, darf eine neue Zahl eingegeben werden ohne einen der 8 Versuche abzuziehen.

    Mein Problem ist, wenn ich im ersten Schritt bereits eine korrekte Eingabe mache (z.B. 30), fordert er mich nochmals auf eine Eingabe zu machen bevor es dann in die Zählschleife geht (anstatt sofort).

    Hat da jemand einen Tip oder kann mir sagen wo das Problem ist?

    Danke!

    // Das Programm erzeugt eine Zufallszahl und lässt den Benutzer 8 Versuche, um die erzeugte Zufallszahl zu erraten. 
    
    #include <stdio.h> 
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
        int i, n, zufallsZahl;
    
        srand(time(NULL));
        zufallsZahl = 1 + (int)(100 * (double)rand() / RAND_MAX);
    
        //Start des Programms
    
        printf("Sie haben 8 Versuche die Zufallszahl zu erraten!\n");
        printf("Geben Sie eine Zahl zwischen 1 und 100 ein:\n");
        scanf("%d", &n);
    
        //Ueberpruefung
    
        do
        {
          printf("Ungültige Eingabe. Zahl muss zwischen 1 und 100 sein\n");
          printf("Bitte wiederholen Sie Ihre Eingabe:\n");
          scanf("%d", &n);
        }
        while (n <= 0 || n > 100); 
    
        if (n >= 1 && n <= 100)
        {
    
        //Ausfuehrung der Zaehlschleife bis Zahl erraten oder 8 Versuche verbraucht sind
    
          for (i = 0; i <= 7; i++)
          {
    	if (n > zufallsZahl)
    	{
    	  printf("Die gewählte Zahl ist größer als die Zufallszahl.\n");
    	  printf("Bitte geben Sie erneut eine Zahl zwischen 1 und 100 ein:\n");
    	  scanf("%d", &n);
    	}
    	else if(n < zufallsZahl)
    	{
    	  printf("Die gewählte Zahl ist kleiner als die Zufallszahl\n");
    	  printf("Bitte geben Sie erneut eine Zahl zwischen 1 und 100 ein:\n");
    	  scanf("%d", &n);
    	}
    	else if(n == zufallsZahl)
    	{
    	  printf("Glückwunsch, Sie haben die Zahl erraten!\n");
    	  return 0;
    	}
          }
          printf("Sie haben alle 8 Versuche verbraucht!\n");
        }
    
        return 0;
    }
    


  • specialagent schrieb:

    Mein Problem ist, wenn ich im ersten Schritt bereits eine korrekte Eingabe mache (z.B. 30), fordert er mich nochmals auf eine Eingabe zu machen bevor es dann in die Zählschleife geht (anstatt sofort).

    Warum hast Du denn in den Z. 22-28 eine do-while -Schleife gewählt?



  • Außerdem ein weiterer Tipp: lagere das Einlesen einer Zahl zwischen n und m in eine Funktion aus. Du willst ja schließlich nicht nur beim ersten Versuch auf Gültigkeit prüfen, sondern auch in allen weiteren Versuchen.

    Also lagere das aus in sowas wie:

    int lies_zahl_in_bereich(int lo, int hi) {
      ...
    }
    

Anmelden zum Antworten