myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » Wie prüfe ich, ob N, A oder B eingegeben wurde, ansonsten Consolenausgabe?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

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

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
RafaelVogt RafaelVogt ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.08.2019
Beiträge: 27


RafaelVogt ist offline

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

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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");

C#-Code:
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();
        }
    }
}
Neuer Beitrag 14.09.2019 16:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RafaelVogt RafaelVogt ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.08.2019
Beiträge: 27

Themenstarter Thema begonnen von RafaelVogt

RafaelVogt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe selber etwas schlankes gefunden:

C#-Code:
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?
Neuer Beitrag 14.09.2019 17:34 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
chilic
myCSharp.de-Poweruser/ Experte

Dabei seit: 12.02.2010
Beiträge: 2.014


chilic ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Code:
1:
2:
3:
4:
            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 14.09.2019 19:21.

Neuer Beitrag 14.09.2019 19:13 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Yankyy02 Yankyy02 ist männlich
myCSharp.de-Mitglied

Dabei seit: 11.04.2014
Beiträge: 8
Entwicklungsumgebung: VS 2017 Pro


Yankyy02 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 14.09.2019 19:14 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RafaelVogt RafaelVogt ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.08.2019
Beiträge: 27

Themenstarter Thema begonnen von RafaelVogt

RafaelVogt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

Vielen Dank Euch. Ist eine tolle community.
Neuer Beitrag 15.09.2019 08:35 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
M.L.
myCSharp.de-Mitglied

Dabei seit: 26.09.2006
Beiträge: 195
Entwicklungsumgebung: VS Community '19


M.L. ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Switch-case kann man auch i.V. mit enum verwenden:  http://dotnetperls.com/switch-enum
Neuer Beitrag 15.09.2019 09:16 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RafaelVogt RafaelVogt ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.08.2019
Beiträge: 27

Themenstarter Thema begonnen von RafaelVogt

RafaelVogt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Ich habe meinen ersten Codeblock nochmal richtig gestellt:

C#-Code:
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):

C#-Code:
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;
            }
Neuer Beitrag 15.09.2019 09:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Th69
myCSharp.de-Poweruser/ Experte

avatar-2578.jpg


Dabei seit: 01.04.2008
Beiträge: 3.390
Entwicklungsumgebung: Visual Studio 2015/17


Th69 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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

C#-Code:
if (choice == "A")
{
    // ...
}
else if (choice == "N")
{
    // ...
}
else if (choice == "E")
{
    // ...
}
else
{
    // default
    // ...
}
Neuer Beitrag 15.09.2019 09:41 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
RafaelVogt RafaelVogt ist männlich
myCSharp.de-Mitglied

Dabei seit: 15.08.2019
Beiträge: 27

Themenstarter Thema begonnen von RafaelVogt

RafaelVogt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Oh Mann ... danke!


mycsharp.de  Moderationshinweis von Abt (15.09.2019 12:31):

Keine Full Qoues bitte.
 
Neuer Beitrag 15.09.2019 09:57 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 2 Monate.
Der letzte Beitrag ist älter als 2 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 17.11.2019 01:53