Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie prüfe ich, ob N, A oder B eingegeben wurde, ansonsten Consolenausgabe?
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

Wie prüfe ich, ob N, A oder B eingegeben wurde, ansonsten Consolenausgabe?

beantworten | zitieren | melden

Hallo zusammen,

auf meiner Reise in die Tiefen von C# bin ich mal wieder ins Stocken geraten. Wie prüfe ich, ob N, A, B eingegeben wurden, um bei einem anderen Buchstaben eine Consolenausgabe zu erwirken?

Ich habe bereits versucht, den string choice auszulesen und in int zu überführen, um eine einfache if-Anweisung zu schreiben. Nach dem Motto:

Wenn nicht N, A, B eigegeben, dann Console.WriteLine("Falsche Eingabe");


namespace _2_6_2_Das_switch_Statement
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Treffen Sie eine Wahl:\n\n";
            message += "(N) - Neues Spiel\n";
            message += "(A) - Altes Spiel fortsetzen\n";
            message += "(E) - Beenden\n";

            Console.WriteLine(message);
            Console.WriteLine("Ihre Auswahl lautet: ");

            string choice = Console.ReadLine().ToUpper();

            if (choice == "N")
            {
                Console.WriteLine("Neues Spiel...");
                Console.ReadKey();
            }
            else if (choice == "A")
            {
                Console.WriteLine("Altes Spiel wird fortgesetzt...");
                Console.ReadKey();
            }
            else if (choice == "E")
            {
                Console.WriteLine("Das Spiel wird beendet...");
                Console.ReadKey();
            }

            Console.ReadKey();
        }
    }
}
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

Ich habe selber etwas schlankes gefunden:


 if (choice != "N")
                if(choice !="A")
                    if(choice !="E")
                    {
                        Console.WriteLine("Keine verfügbare Option!");
                        Console.ReadKey();
                    }
                    else if (choice == "N")
                    {
                        Console.WriteLine("Neues Spiel..."); 
                        Console.ReadKey();
                    }
                    else if (choice == "A")
                    {
                        Console.WriteLine("Altes Spiel wird fortgesetzt..."); 
                        Console.ReadKey();
                    }
                    else if (choice != "E")
                    {
                        Console.WriteLine("Das Spiel wird beendet...");
                        Console.ReadKey();
                    }

Gibt es eine schlankere Möglichkeit?
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.114

beantworten | zitieren | melden

Dass man einen String nicht in eine Zahl umwandelt um ihn zu vergleichen, hast du also selbst gefunden :-)

Man kann in C# mit Strings auch switch-case veranstalten. Das ist ein kleines bisschen weniger zu schreiben.

Du könntest das ReadKey nach den if Tests aufrufen, das passiert nämlich immer.

Ich schreibe zwar auch nicht für jedes if die { } drum herum, aber in deinem Fall solltetst du das dringend tun. Wozu deine ifs gehören ist bei der Verschachtelung nämlich nicht so leicht ersichtlich und wenn du da irgendwas nachträglich einfügst kann es sein dass du ein Laufzeitverhalten kriegst das du so gar nicht wolltest.

Dann schau dir mal an was du da prüfst.
Das erste if wird betreten wenn choice NICHT N ist. Das zweite wird betreten wenn choice NICHT A ist.
Die inneren if prüfen dann ob choice N oder A ist. Wenn das der Fall wäre, wäre dein Programm gar nicht an diese Stelle gekommen.
Das bedeutet du brauchst die ersten zwei if gar nicht.

Und im ersten Beispiel prüfst du auf == 'E', im zweiten auf != 'E'.

Ergänzung: du kannst auch einfach schreiben

            string message = "Treffen Sie eine Wahl:\n\n" +
                "(N) - Neues Spiel\n" +
                "(A) - Altes Spiel fortsetzen\n" +
                "(E) - Beenden\n";
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von chilic am .
private Nachricht | Beiträge des Benutzers
Yankyy02
myCSharp.de - Member



Dabei seit:
Beiträge: 10

beantworten | zitieren | melden

Hallo RafaelVogt,
Zitat
Gibt es eine schlankere Möglichkeit?
ja gibt es und dein Namespace beinhaltet die schlankere Möglichkeit ;-)
Stichwort: switch-case
Und um strings zu verketten solltest du dir die StringBuilder Klasse ansehen.
Diese beiden Konstrukte werden aber in jedem guten Buch zu C# bereits am Anfang behandelt.
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

Danke für Eure Antworten. In der Tat behandelt mein Buch als nächstes das switch-statement (-:

Vielen Dank Euch. Ist eine tolle community.
private Nachricht | Beiträge des Benutzers
M.L.
myCSharp.de - Member



Dabei seit:
Beiträge: 343

beantworten | zitieren | melden

Switch-case kann man auch i.V. mit enum verwenden: http://dotnetperls.com/switch-enum
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray ;-)
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

Ich habe meinen ersten Codeblock nochmal richtig gestellt:


namespace _2_6_2_Das_switch_Statement
{
    class Program
    {
        static void Main(string[] args)
        {
            string message = "Treffen Sie eine Wahl:\n\n";
            message += "(N) - Neues Spiel\n";
            message += "(A) - Altes Spiel fortsetzen\n";
            message += "(E) - Beenden\n";
 
            Console.WriteLine(message);
            Console.WriteLine("Ihre Auswahl lautet: ");

            string choice = Console.ReadLine().ToUpper();

            if (choice == "A")
            {
                Console.WriteLine();
                Console.WriteLine("Altes Spiel wird fortgesetzt...");
                Console.ReadKey();
            }
            else if (choice == "N")
            {
                Console.WriteLine();
                Console.WriteLine("Neues Spiel wird gestartet...");
                Console.ReadKey();
            }
            else if (choice == "E")
            {
                Console.WriteLine();
                Console.WriteLine("Das Spiel wird beendet...");
                Console.ReadKey();
            }
            else if (choice != "A")
            {
                Console.WriteLine();
                Console.WriteLine("Ungültige Eingabe!");
                Console.ReadKey();
            }
        }
    }
}

Ist es legitim als letztes nur noch auf Ungleichheit ( != "A" ) zu prüfen und davon zu profitieren, dass bei einer Eingabe von "A" "N" "E" da Progamm schon vorher seine AUsführungen ausführt, oder sollte man auch !="N" und !="E" auch noch prüfen?

Weiter habe ich das jetzt auch mit dem switch-statement gemacht (einfach den if-Block ersetzt):


 switch (cho)
            {
                case "N":
                    Console.WriteLine("Neues Spiel...");
                    Console.WriteLine();
                    break;
                case "A":
                    Console.WriteLine("Altes Spiel laden...");
                    Console.WriteLine();
                    break;
                case "E":
                    Console.WriteLine("Spiel wird beendet...");
                    Console.WriteLine();
                    break;
                default:
                    Console.WriteLine("Ungültige Eingabe...");
                    Console.WriteLine();
                    break;
            }
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Du brauchst beim letzten else-Fall keine Bedingung mehr hinschreiben (das entspricht dann dem default-Fall beim switch):


if (choice == "A")
{
    // ...
}
else if (choice == "N")
{
    // ...
}
else if (choice == "E")
{
    // ...
}
else
{
    // default
    // ...
}
private Nachricht | Beiträge des Benutzers
RafaelVogt
myCSharp.de - Member



Dabei seit:
Beiträge: 27

Themenstarter:

beantworten | zitieren | melden

Oh Mann ... danke!

Moderationshinweis von Abt (15.09.2019 - 12:31)

Keine Full Qoues bitte.

private Nachricht | Beiträge des Benutzers