C# einfacherer Weg bei Eingabe Programm beenden?
Guten Tag ich habe es zurzeit das sobald der Benutzer "abschließen eingibt" das Programm beendet wird. Ich will es jetzt so machen das wenn ich Sachen wie ja, nein (Situationsbedingt) es so vereinfachen kann das ich nicht sowas hier machen muss:
if(choice == "ja"|| choice == "j" || choice == "JA" || choice == "jA")
und so weiter halt ob es Vereinfachbarer ist und generell die Groß und klein Schreibung nicht beachtet wird.
4 Antworten
Es gibt auf jeden Fall einfachere Möglichkeiten.
Es gibt die Möglichkeit von ToLower():
if(choice.ToLower() == "ja") {}
Oder ToUpper():
if(choice.ToUpper() == "JA") {}
Oder auch über Equals():
if(choice.Equals("ja", StringComparison.OrdinalIgnoreCase)){}
Alles drei erspart dir Schreibarbeit.
Dein e Variablenbenennung "choice"
...hat mich inspiriert den Choice-Befehl von Batch nachzubilden....
Warum sollte irgendwer einen Buchstaben und Enter eingeben, wenn es genügt dem Nutzer die gültigen Eine-Taste-Optionen anzubieten und ansonsten zu tun als hätte der Nutze nichts getan... bei falscher Eingabe wird einfach mit einem Backspace Leerzeichen Backspace der falsche Buchstabe überschrieben und auf den nächsten gewartet
// Simuliere Batch choice
using System;
using System.Text.RegularExpressions;
namespace IncludeHelp
{
class Test
{
// Main Method
static void Main(string[] args)
{
string rightLetters = "AJX"; //Hier gültige Buchstaben zum verlassen des Inputloops festlegen
string pattern = String.Format("[{0}]",rightLetters) ;
char ch;
Match m;
Console.WriteLine("Weiter mit den Buchstaben: {0}", string.Join(",", rightLetters.ToCharArray ()));
do
{
Console.Write("\b \b"); //Verberge falsche Eingaben. Backspace Leerzeichen Backspace
ch = Console.ReadKey().KeyChar; //nur ein Zeichen lesen
m = Regex.Match(ch.ToString(), pattern, RegexOptions.IgnoreCase); //simmt einr der Buchstaben?
} while (!m.Success); //drehe solange falsche Buchstaben
Console.WriteLine();
Console.WriteLine("Du hast die SwitchOption :{0} gewählt", ch);
// Console offen halten
Console.Read();
}
}
}
if (choice.ToLower() == „ja“)
Ist was du suchst.
und einmal oder beliebig oft A oder a...
Da hat die Autokorrektur vom Handy zugeschlagen...:
Regex *[char] steht natürlich für keinmal oder beliebig ...
Du meinst also die RegEx
^[Jj]{1}[Aa]*$
oder
^j{1}a*$
mit der Option, die Groß- und Kleinschreibung zu ignorieren, denn der Text muss mit genau einem "j" beginnen und mit keinem oder beliebig vielen "a"s enden, darf aber nicht "jaguar" sein.
Der Ansatz ist schon mal ok, für solche Sachen gibts match und RegularExpressions...
Im einfachste Fall wäre das [Jj]*[Aa] , J oder j und einmal oder beliebig oft A oder a... (da ist auch ein jauchzendes JAaaaa... erlaubt😅
Für einen einfachen Test, ob da j oder ja steht, braucht man kein Regex. Vor allen Dingen nicht wenn derjenige der es lernen soll, nicht die ToLower-Methode kennt.
Sicher, man kann es machen. Aber ich denke das verwirrt mehr als es hilft, und schießt über das benötigte hinaus.
Das scheint das generelle Problem von Leuten , mit einem Erfahrungpotential von vielen Jahrzehnten zu sein.
Neben den Kenntnissen in Sachen Programmierung, kennt man auch das Verhalten von Nutzern, welche zum Teil sehr eigenwillig auf Aufforderungen durch ein Programm reagieren.
Das scheint der Fragesteller ebenfalls entdeckt zu haben und versucht jede verrückte Eventualität abzudecken. Natürlich gibt es bei ja/j nur 4 Variationen, welche man mit .ToLower() auf 2 reduziert. Hockt da ein Brite vorm Rechner kommt auch noch yes/y hinzu... (ein Affentanz den ich vor kurzem selbst erleben durfte)
Das war nicht nur das rüberreichen des Salzstreuers (den habt Ihr ihm bereits gegebenen), sonder ein Anstoß um auch in der Zukunft auf wachsende Anforderungen flexibel zu reagieren.
In dieser Hinsicht scheine ich auf der gleichen Schine zu fahren wie die Entwickler von RegEx oder Choice...
Zwei Herangehensweisen , die eine (RegEx) reagiert flexibel auf verschiedene Möglichkeiten einer Antwort. Die andere lässt nur vorgegebene Antworten zu.
Jede popelige Messagebox bietet heute nur ein Wahl zwischen vorgegeben Antwortmöglichkeiten.
if (choice.ToLowerInvariant().StartsWith("j"))
wäre eine Möglichkeit.
Braucht man alles nicht mit RegEx