Fragensteller
Hilfe Anforderung bei Korrektur von Neustart eines Programms im Konsolenanwendung ( C# )

Frage
-
Hallo Community,
Ich habe ein kleines Programm erstellt was über die Konsole läuft und würde ganz Gerne eine Erklärung sowie eine Lösung von meinem Fehlern haben, ich würde mich sehr darüber freuen ich bin Programmiere erst seit Knapp einer Woche und habe noch nicht so viel Ahnung davon was was ist :)
Aber nochmal Ausführlicher Erklärt:
Ich möchte das sich das kleine Zahlen erraten Spiel neustarten wenn man j/J eingibt oder das es sich bei n/N Beendet nur wenn ich versuche das Spiel zu starten klappt mit dem Random Generieren der Zahlen sowie eingeben und Ist die Zahl Größer/Kleiner alles, aber Sobald man die Lösung herausgefunden hat und der Text "Herzlichen Glückwunsch..." kommt, und ich ein j eingebe geschieht fürs erste nichts gebe ich dann erneut ein j/n ein Spukt er mir bei dem Command:
if (Convert.ToInt32(BenutzerEingabe) == GeheimZahl)
Eine Fehlermeldung aus, folgende Meldung:
System.FormatExeption: "Die Eingabezeichenfolge hat das falsche Format."
Hier mein Quellcode der ist nicht so Wichtig das ich ihn Verheimlichen muss:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GroesserKleiner
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Finde die geheime Zahl zwischen 0 und 100");
Console.WriteLine("Gib eine beliebige Zahl zwischen 0 und 100 ein ");
string BenutzerEingabe;
int GeheimZahl;
bool Beenden = false;
//Generiert eine Zufallszahl
Random ZufallsZahl = new Random();
GeheimZahl = ZufallsZahl.Next(0, 100);
while (Beenden == false)
{
BenutzerEingabe = Console.ReadLine();
if (Convert.ToInt32(BenutzerEingabe) == GeheimZahl)
{
Console.WriteLine("Herzlichen Glückwunsch, Sie haben die geheime Zahl gefunden!");
String weiter;
do
{
Console.WriteLine("\nNeu starten? (j/n)");
weiter = Console.ReadLine().Trim();
Beenden = weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase);
} while (!weiter.Equals("j", StringComparison.InvariantCultureIgnoreCase) & !weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase));
}
else if (Convert.ToInt32(BenutzerEingabe) > GeheimZahl)
{
Console.WriteLine("Die gesuchte Zahl ist kleiner als " + BenutzerEingabe + " ");
}
else if (Convert.ToInt32(BenutzerEingabe) < GeheimZahl)
{
Console.WriteLine("Die gesuchte Zahl ist größer als " + BenutzerEingabe + " ");
}
}
}
}
}
- Bearbeitet sh4dowmanski Donnerstag, 13. September 2018 11:59
Alle Antworten
-
Hallo sh4dowmanski,
aber Sobald man die Lösung herausgefunden hat und der Text "Herzlichen Glückwunsch..." kommt, und ich ein j eingebe geschieht fürs erste nichts gebe ich dann erneut ein j/n ein Spukt er mir bei dem Command:
if (Convert.ToInt32(BenutzerEingabe) == GeheimZahl)
Eine Fehlermeldung aus
while (Beenden == false)
{
BenutzerEingabe = Console.ReadLine();if (Convert.ToInt32(BenutzerEingabe) == GeheimZahl)
{
Console.WriteLine("Herzlichen Glückwunsch, Sie haben die geheime Zahl gefunden!");String weiter;
do
{
Console.WriteLine("\nNeu starten? (j/n)");
weiter = Console.ReadLine().Trim();
Beenden = weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase);
} while (!weiter.Equals("j", StringComparison.InvariantCultureIgnoreCase) & !weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase));
}
else if (Convert.ToInt32(BenutzerEingabe) > GeheimZahl)
{
Console.WriteLine("Die gesuchte Zahl ist kleiner als " + BenutzerEingabe + " ");
}
else if (Convert.ToInt32(BenutzerEingabe) < GeheimZahl)
{
Console.WriteLine("Die gesuchte Zahl ist größer als " + BenutzerEingabe + " ");
}
}Wenn Du "j" nach dem Erraten der Zahl eingibst, passiert folgendes: die innere do/while-Schleife wird verlassen und da die Variable Beenden immer noch false ist, springt das Programm an den Anfang der while-Schleife ( Console.ReadLine() ), d. h. es wird eine Zahl erwartet, die dann erneut mit der (alten) Geheimzahl verglichen wird. Wenn keine Zahl eingegeben wurde, tritt die von Dir angeführe Formatausnahme auf.
Um dem Anwender zu vermitteln, dass er erneut die Zahl erraten soll, kannst Du die zwei am Anfang ausgegebenen Zeilen wiederholen. Es wäre auch sinnvoll, die Geheimzahl zu ändern. Die if-Anweisung in der while-Schleife könnte dann wie folgt angepasst werden:
if (Convert.ToInt32(BenutzerEingabe) == GeheimZahl) { Console.WriteLine("Herzlichen Glückwunsch, Sie haben die geheime Zahl gefunden!"); String weiter; do { Console.WriteLine("\nNeu starten? (j/n)"); weiter = Console.ReadLine().Trim(); Beenden = weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase); } while (!weiter.Equals("j", StringComparison.InvariantCultureIgnoreCase) & !weiter.Equals("n", StringComparison.InvariantCultureIgnoreCase)); if (weiter.Equals("j", StringComparison.InvariantCultureIgnoreCase)) { GeheimZahl = ZufallsZahl.Next(0, 100); //neue Geheimzahl generieren Console.WriteLine("Finde die geheime Zahl zwischen 0 und 100"); Console.WriteLine("Gib eine beliebige Zahl zwischen 0 und 100 ein "); } } else if (Convert.ToInt32(BenutzerEingabe) > GeheimZahl) { Console.WriteLine("Die gesuchte Zahl ist kleiner als " + BenutzerEingabe + " "); } else if (Convert.ToInt32(BenutzerEingabe) < GeheimZahl) { Console.WriteLine("Die gesuchte Zahl ist größer als " + BenutzerEingabe + " "); }
Gruß,
Dimitar
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Bearbeitet Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 14. September 2018 11:44