Laden...

Console: Benutzereingabe soll nur "Ja" od. "Nein" zulassen

Erstellt von rangman135 vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.937 Views
R
rangman135 Themenstarter:in
13 Beiträge seit 2015
vor 7 Jahren
Console: Benutzereingabe soll nur "Ja" od. "Nein" zulassen

Hallo liebe Community,
ich habe eine Frage an euch und hoffe das ihr mir helfen könnt.
Wie kann ich eine Nutzereingabe machen bei dem man als Antwort nur Ja oder Nein wählen kann? Und falls man etwas anderes schreibt, dass dann erneut nach Ja oder Nein gefragt wird.

Ich hoffe ihr wisst was ich meine und könnt mir helfen.

Mit freundlichen Grüßen,

rangman135

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo rangman135,


string userInput = null;

do
{
	Console.Write("Deine Antwort ist 'Ja' od. 'Nein'?");
	userInput = Console.ReadLine();

	//if (userInput == "Ja" || userInput == "Nein") break;
	if (Regex.IsMatch(userInput, "^(Ja|Nein)$")) break;
	// gibt sicher noch kompliziertere Möglichkeiten ;-)
} while (string.IsNullOrWhiteSpace(userInput));

Bedenke aber dass so der Benutzer u.U. in einer Schleife festhängt -- es sei denn er bricht das Programm (z.B. mit Strg+C) ab.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

2.079 Beiträge seit 2012
vor 7 Jahren

Wenn ich was mit der Konsole mache, benutze ich ganz gerne ReadKey.
Du kannst dann auch in einer Schleife jedes geschriebene Zeichen abfangen und darauf reagieren.
Ist es ein j -> Ja
Ist es ein n -> Nein

Console.WriteLine("Ja [j], Nein[n]");
var input = null as string;

while(true)
{
    var keyInfo = Console.ReadKey(true);

    // STRG + C abfangen
    if (keyInfo.Modifiers == ConsoleModifiers.Control && keyInfo.Key == ConsoleKey.C)
        break;

    // J oder N abfangen
    if (keyInfo.Key == ConsoleKey.J )
    {
        input = "Ja";
        break;
    }
    if (keyInfo.Key == ConsoleKey.N)
    {
        input = "Nein";
        break;
    }

    // Über Fehleingabe informieren
    Console.Beep();
}

Console.WriteLine(input);
Console.ReadKey();

So finde ich die Nutzung deutlich angenehmer, da ein Tastendruck reicht.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

6.911 Beiträge seit 2009
vor 7 Jahren

Hallo Palladin007,

  
var input = null as string;  
  

Finde ich schon schräg und umständlich für


string input = null;

Mit var lässt sich auch übertreiben, so dass der Code nicht unbedingt leserlicher wird.

So finde ich die Nutzung deutlich angenehmer, da ein Tastendruck reicht.

Klar, würde ich auch nur mit [j] / [n] machen. Aber so wars ja nicht gefragt 😉

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
rangman135 Themenstarter:in
13 Beiträge seit 2015
vor 7 Jahren

Vielen dank für die beiden Antworten. Da ich später sowieso mit WindowsForms arbeiten werde, werde ich das so wohl nicht mehr brauchen. Ein grundlegendes Verständnis dafür wollte ich trotzdem haben.