Ich versuche, die case-Anweisung zu durchlaufen, wenn die Antwort falsch ist, aber die Anweisung bricht immer und ich bin nicht in der Lage zu loopen. Wie würde ich dieses Problem lösen?Wie umschlinge ich eine switch-Anweisung in C#
Antwort
Das Schlüsselwort "break" bricht nur aus dem ersten Codeblock (Leerzeichen zwischen dem {...}) heraus, in dem es sich befindet. Die Unterbrechung Ihrer Schalter sollte Ihre while-Schleife nicht stören.
Das Problem ist, dass Sie keine Klammern nach Ihrer While-Schleife haben, so dass es nur in der Zeile direkt danach wirkt.
Unten ist wahrscheinlich, was Sie gesucht haben.
class Program
{
static void Main(string[] args)
{
string Studentname;
string retry = "No";
Console.WriteLine("What is the Student's name? ");
do
{
Console.WriteLine("What is the Student's name? ");
Studentname = Console.ReadLine();
switch (Studentname)
{
case "George":
Console.WriteLine("Yes in the list");
//Console.ReadLine();
break;
case "Goblin":
Console.WriteLine("Yes in the list");
//Console.ReadLine();
break;
case "Peter":
Console.WriteLine("Yes in the list");
//Console.ReadLine();
break;
case "TJ":
Console.WriteLine("Yes in the list");
//Console.ReadLine();
break;
default:
Console.WriteLine("Not in the list");
Console.WriteLine("Would you like to retry?");
retry = Console.ReadLine();
break;
}
} while (retry != "No");
}
}
EDIT: Ihre While-Schleife wurde auch nie eingegeben. Sie setzen "retry" auf "No" und prüfen, ob es nicht "No" ist. Um das Problem zu lösen, können Sie entweder eine "do ... while()" - Schleife verwenden, die immer mindestens einmal wiederholt wird, oder Sie können die erste Zuweisung von "retry" auf "Nein" setzen.
EDIT 2: @Kason ist korrekt. Ich wusste nicht, dass dein eigentliches Ziel war, zu gehen, wenn der Name gefunden wurde. Wenn das der Fall ist, dann ist ein "do ... while()" die beste Option.
Wenn der Anfangswert für den Wiederholungsversuch Nein ist, kann der Code in der Schleife nicht ausgeführt werden. – Kason
Gute Punkte, ich habe nicht wirklich die Logik betrachtet, nur gesehen, dass die Klammern in der While-Schleife fehlten. Es sollte jetzt gut sein. –
Ich denke, Sie sollten auch die Console.Readline() aus der switch-Anweisung entfernen. Ich denke nicht, dass sie irgendeinen Zweck erfüllen - außer dem im Standardzweig. – failedprogramming
Stattdessen könnten Sie diese einfache LINQ-Methode verwenden:
string Studentnames[] = new string[]
{
"George",
"Goblin",
"Peter",
"TJ"
}
while (retry != "No")
{
if (Studentnames.Contains(Studentname)
{
Console.WriteLine("Yes in the list");
Console.ReadLine();
}
else
{
Console.WriteLine("Not in the list");
Console.WriteLine("Would you like to retry?");
retry = Console.ReadLine();
}
}
Aber es funktioniert nicht, weil Sie die {}
für die while-Anweisung forgotton haben zu setzen.
Der Ansatz ist gut, der Grund für jemanden, der die Stimme abgibt, ist vielleicht, dass Sie nicht erklären, warum der Code in der Frage – Kason
nicht funktioniert. Okay, danke @Kason. –
Fügen Sie nach der Anweisung while eine linke geschweifte Klammer und am Ende des Codes eine passende geschweifte Klammer hinzu.
Es gibt keine geschweiften Klammern nach dem Anfang der while
Schleife. Das bedeutet, dass die Anweisung while
nur für die unmittelbar folgende Zeile gilt.
while (retry != "No")
Console.WriteLine("What is the Student's name? ");
Wie bereits erwähnt, beginnt retry
mit "Nein". Wenn also die while
Bedingung ausgewertet wird, ist es falsch. Die folgende Zeile wird nie ausgeführt, da sie nur ausgeführt werden soll, wenn retry != "No"
.
Wenn Sie möchten, dass while
auf einen Anweisungsblock angewendet wird, fügen Sie sie in geschweifte Klammern ein.
while (retry != "No")
{
//Everything inside these braces will execute if retry != "No".
//If it gets to the end and retry still != "No" then it will repeat.
//You'd most likely want to do something inside this loop sooner or
//later that changes retry to something else so that the loop can
//end. Or you can use "break" to exit the loop.
}
- 1. Wie ich meinen aktuellen VBA-Code umschlinge
- 2. Wie umschlinge ich Span-Tags in einem Link_to in Slim?
- 3. Java String Wrapping: Wie umschlinge ich Wörter in einem String unter Neue Zeile Zeichen (\ n)
- 4. Wie kopiere ich eine Datei in C#
- 5. Wie nehme ich eine Zeileneingabe in C?
- 6. Wie öffne ich eine Datei in C++?
- 7. Wie starte ich eine Anwendung in C#?
- 8. Wie lese ich eine Binärdatei in C#?
- 9. Wie erstelle ich eine Stoppuhr in C#?
- 10. Wie puffere ich eine RichTextBox in C#?
- 11. Wie bekomme ich eine Echtzeituhr in C#?
- 12. Wie bekomme ich eine Unterliste in C#
- 13. Wie trenne ich eine Liste in C#?
- 14. Wie berühre ich eine Datei in C#?
- 15. Wie konvertiere ich eine lange in eine Zeichenfolge in C++?
- 16. Wie kann ich eine C++ Union in C# simulieren?
- 17. Wie verwende ich eine C++ - Bibliothek in einer C# -App?
- 18. Wie dokumentiere ich eine C# dll
- 19. C# Wie wähle ich eine Sprache aus?
- 20. Wie erstelle ich eine C-Factory-Funktion?
- 21. Wie konvertiere ich eine Zeichenfolge in C# in Byte?
- 22. wie ich in umgekehrter Richtung über eine Karte in C++
- 23. Wie schreibe ich eine XML-Datei in C# in Unity?
- 24. Wie schreibe ich (groß) XML in eine Datei in C#?
- 25. Wie scrape ich eine Webseite mit C?
- 26. C# UWP Wie erstelle ich eine Sicherungsdatei
- 27. Wie erfasse ich eine Variable (C#)
- 28. Wie programmiere ich eine Sache C++
- 29. Wie schreibe ich eine Skriptsprache mit C?
- 30. C++ wie man eine Struktur löscht? Ich
In Ihrem Fall ist 'do..while()' Schleife besser. – Kason
"Im Gegensatz zur while-Anweisung wird eine do-while-Schleife einmal ausgeführt, bevor der bedingte Ausdruck ausgewertet wird." https://msdn.microsoft.com/en-us/library/370s1zax.aspx – blins
Würden Sie die Verwendung von if-Anweisungen hier betrachten? – Alexandru