Nutzereingabe
-
Hiho,
ich bin neu hier im Forum. Sorry, dass ich euch mit dieser simplen Frage belästige, aber ich hab leider kein C#-Anfängerforum gefunden. Kurz vielleicht was zu mir: ich programmiere jetzt seit knapp einer Woche mit C#. Die Frage wird also sicher nicht meine Letzte sein
Die Sprache macht mir viel Spaß und beim durcharbeiten von Übungsaufgaben mit einem Buch hatte ich auch mit kleinen selbst erstellten Programmen erste Erfolgserlebnisse. Jetzt hänge ich jedoch an meinem aktuellen Projekt fest: ein kleines Zahlenratespiel.
Kurz zur Problembeschreibung: Im ersten Teil (der zweiten Schleife des Programms) wird der Benutzer zur Eingabe einer Zahl aufgefordert. Diese Zahl wird dann in Variable a gespeichert und mit der Rnd-Zahl verglichen. Wenn die gesuchte Zahl gleich der eingegebenen ist, gehts aus der Schleife raus. Wenn die Zahl größer oder kleiner ist soll der Benutzer eine neue Zahl eingeben. Da liegt auch schon der Hund begraben. Als ich das Programm durchlaufen ließ, hab ich festgestellt, dass der PC in einer Endlosschleife hängt, da mit angegebenen Befehl keine erneute Eingabe abgefragt wird, sondern immer wieder die selbe Variable verglichen wird.
int a, b, punkte = 0, stop=0, zahlrichtig=0, nochmal=0; while (stop == 0 || nochmal == 1) //Schleife für 2. Teil (Frage nach Neustart) { Random Rnd = new Random(); int Rnd1 = Rnd.Next(1, 11); //Random-Konstrukt. Computer erschafft Zahl zwischen 1-10 while (zahlrichtig == 0) { a = int.Parse(txtEingabe.Text); //Hier ist das Problem: Nutzereingabe wird hier in die Variable a gespeichert if (Rnd1 < a) { lblAusgabe.Text = Convert.ToString("Zahl zu klein. Gesuchte Zahl ist größer."); a = 0; } else if (Rnd1 > a) { lblAusgabe.Text = Convert.ToString("Zahl zu groß. Gesuchte Zahl ist kleiner."); a = 0; } else if (Rnd1 == a) { lblAusgabe.Text = Convert.ToString("Richtig geraten"); punkte = punkte + 1; lblPunkte.Text = Convert.ToString("Punkte: " + punkte); zahlrichtig = 1; }
Habt ihr vielleicht eine Idee, wie man den Benutzer zur erneuten Eingabe auffordern kann?
PS: Ich benutze Visual Studio mit Windows Forms falls das weiter hilft.
Vielen Dank!
Grüße
Crouch
-
Du vergleichst in der zweiten Schleife immer wieder den gleichen Wert, soweit richtig. Die Frage ist, wie wird die Auswertung denn gestartet ? Leg dir doch eine globale Variable mit der Zufallszahl an und mach im Click - Event so was in der Art:
[Pseudo Code]
private int zufallsZahl, punkte; private void Check_Click(object sender, RoutedEventArgs e) { a = int.Parse(txtEingabe.Text); if (zufallsZahl < a) { lblAusgabe.Text = Convert.ToString("Zahl zu klein. Gesuchte Zahl ist größer."); } else if (zufallsZahl > a) { lblAusgabe.Text = Convert.ToString("Zahl zu groß. Gesuchte Zahl ist kleiner."); } else if (Rnd1 == a) { lblAusgabe.Text = Convert.ToString("Richtig geraten"); punkte = punkte + 1; lblPunkte.Text = Convert.ToString("Punkte: " + punkte); if (MessageBox.Show("Neue Runde ?", "", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { txtEingabe.Clear(); zufallsZahl = Rnd.Next(1, 11); return; } else Close(); } }
-
Vielen Dank, damit klappts jetz wunderbar und ich spare mir auch die zwei Schleifen!