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
Probleme mit if und else
BoycottNestle
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

Probleme mit if und else

beantworten | zitieren | melden

Hallo Community,
Ich versuche ein kleines RPG zu schreiben und nebenbei die Sprache C# zu lernen, habe aber Probleme mit der if - else - Schleife.
Seltsamerweise reagiert das Programm umgekehrt auf die Buchstaben 'u' für umsehen und 'f' für fliehen.
Könnt ihr mir sagen wo der Fehler liegt?


 //Wiederkehrende Ausgabe der Spieldaten
            string spieldaten = "Spieldaten:  " + "Game: " + play + "  Lv: " + lv + "  EP: " + ep + "  HP: " + hp +
                "  Rsk: " + rsk + "  laufen: " + laufen + "  sprechen: " + sprechen + "  hören: "
                + hören + "  sehen: " + sehen;
            Console.WriteLine("Du befindest dich in einem Zimmer ohne Fenster.\nDu hast keine Erinnerung an die " +
                "Vergangenheit, dein einziger Hinweis ist ein kleiner Zettel auf dem Boden.\nDu nimmst ihn auf und ließt:\n" +
                "Achte darauf, kein hohes Risiko einzugehen. Nur dann solltest du Fremden vertrauen und ohne weiteres nutzen " +
                "was du findest.\nGewalt ist meist nicht die beste Lösung.\nBegegnest du Fremden musst du dich entscheiden, ob" +
                "mit ihnen sprechen, kämpfen oder fliehen möchtest. \nViel Glück auf deinem Weg.");
            Console.WriteLine("\nDrücke irgend eine Taste um fortzufahren...");
            Console.ReadKey(true);

            Console.WriteLine("\nIm Raum herrscht große Unordnung, möchtest du dich näher umsehen oder durch die einzige Tür nach draußen gehen? " +
                "Drücke 'u' um dich umzusehen oder 'f' um zu fliehen/den Raum zu verlassen\n");
            Console.WriteLine(spieldaten);
            if (Console.ReadKey().Key != ConsoleKey.U)

                Console.WriteLine("\nDu findest einen Rucksack mit Nahrung und Wasser, \naußerdem liegt ein " +
                     "Schlüssel auf einem der niedrigen Tische.\nDrücke 'n' um direkt etwas zu trinken und zu essen, \ndrücke" +
                     "'f' um den Raum zu verlassen");

            else if (Console.ReadKey().Key != ConsoleKey.F)

                Console.WriteLine("\nDie Tür ist verschlossen. Drücke 'u' um dich umzusehen.");

            else Console.WriteLine("Falsche Taste!");
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BoycottNestle am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16.393

beantworten | zitieren | melden

Dein Problem ist, dass Du Console.ReadKey() mehrfach ausführst.
Console.ReadKey() ist eine Methode, die eine Aktion erfordert und das als Rückgabe in eine Variable ablegt.
Was Dein Code macht ist, den Benutzer immer und immer wieder nach einer Aktion aufforderst, was quatsch ist.

Du musst den Wert von Console.ReadKey() in eine Variable legen, und mit der Variable arbeiten.
Methoden sind keine Datenspeicher, sondern führen etwas aktiv aus.

Und für Deine eigene Übersichtlichkeit solltest Du die Klammern von if Blöcken nicht weg lassen.
Auch die C# Guidelines empfehlen aktiv des Verwenden von Klammern in solchen Situationen.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Hallo und willkommen,

deine Abfrage

if (Console.ReadKey().Key != ConsoleKey.U)
ist falsch, benutze den Gleichheitsoperator ==.
Außerdem benutzt du Console.ReadKey() nicht korrekt - du solltest nur einmalig den Tastendruck abfragen und einer Variablen zuordnen (s.a. 2 Beispiel im Link), da du sonst für 'U' und 'F' zweimal auf einen Tastendruck wartest.

PS: Es heißt if - else-Anweisung (nicht Schleife)!
private Nachricht | Beiträge des Benutzers
BoycottNestle
myCSharp.de - Member



Dabei seit:
Beiträge: 2

Themenstarter:

beantworten | zitieren | melden

Danke, nach einigem probieren und ein bisschen Recherche nach Beispielcode habe ich es letztendlich hinbekommen. :-)
private Nachricht | Beiträge des Benutzers