Laden...

Wie kann ich mit einem Switch/case auf Variablen abfragen?

Erstellt von Saarbrückchen vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.358 Views
S
Saarbrückchen Themenstarter:in
4 Beiträge seit 2020
vor 4 Jahren
Wie kann ich mit einem Switch/case auf Variablen abfragen?

Abend zusammen.

Ich lerne jetzt seit zwei Tagen C# und habe mir paar Grundlagen angeeignet, welche ich ich mit nem einfachen "Programm" (Konsole) besser einverleiben möchte. Also Freihand.

Aber ab dem Switch Teil klappt es nicht. Ich möchte, dass wenn die Frage "Console.WriteLine("Auf welchem Kontinent bist du geboren?");" kommt und mir die Auswahlmöglichkeiten angezeigt werden ( A - G ), zB "C" eingeben, damit mir "Console.WriteLine("Du bist aus Nordamerika. Geil!");" in der Konsole angezeigt wird.
Aber irgendwie zeigt er mir immer an dass ich ein Alien sei 8o.
Kann mir wer helfen? Habe jetzt auch schon bestimmt ne Std. probiert, gesucht, probiert..

PS: Das "Programm" soll keinen Sinn ergeben - das ist aktuell so das "beste", was ich aus der Birne heraus hinbekomme. Oder auch nicht...

using System;

namespace ConsoleApp5
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Gib deinen Vor -und Nachnamen ein");
            string vnname = Console.ReadLine();
            Console.WriteLine("Gib deine Straße ein");
            string str = Console.ReadLine();
            Console.WriteLine("Gibt deine Hausnummer ein");
            int hausnr = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Gib deine PLZ ein");
            int plz = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Gibt den Ort ein");
            string ort = Console.ReadLine();

            //Geburtsdatumabfrage
            Console.WriteLine("Wie alt bist du?");
            int alter = Convert.ToInt32(Console.ReadLine());
            if(alter >= 18)
                {
                Console.WriteLine("Ok, darfst weiter...");

                }
            else
            {
                Console.WriteLine("Sorry, du bist zu jung. Schreibe -Entschuldigung- zur Beendigung des Programms!");
                string sry = Console.ReadLine();
                string entschuldigung = "Entschuldigung";
                if (sry == entschuldigung)
                {

                    Console.WriteLine("Ok, passt. Tschüss! Drück ne Taste zum beenden und mach ne Fliege!");
                    Console.ReadKey();
                }

            }
            //Switch Kontinent
            Console.WriteLine("Auf welchem Kontinent bist du geboren?");
            Console.WriteLine("A = Asien | B = Afrika | C = Nordamerika | D = Südamerika | E = Antarktika | F = Europa | G = Australien");
            const string A = "Asien", B = "Afrika", C = "Nordamerika", D = "Südamerika", E = "Antarktika", F = "Europa", G = "Australien";
            string kontinentEingabe = Console.ReadLine();

            switch (kontinentEingabe)
            {
                case A:
                    Console.WriteLine("Du kommst aus Asien. Cool!");
                    break;
                case B:
                    Console.WriteLine("Du bist in Afrika geboren! Super!");
                    break;
                case C:
                    Console.WriteLine("Du bist aus Nordamerika. Geil!");
                    break;
                case D:
                    Console.WriteLine("Du bist aus Südamerika. Mega!");
                    break;
                case E:
                    Console.WriteLine("Du bist aus Antarktika. Mega!");
                    break;
                case F:
                    Console.WriteLine("Du bist aus Europa, geil. Ich auch!");
                    break;
                case G:
                    Console.WriteLine("Du bist aus Australien. Nice!");
                    break;
                default:
                    Console.WriteLine("Scheinst wohl ein Alien zu sein. Ich hoffe du kommst in Frieden!");
                    break;
            }


            Console.ReadKey();

        }
    }
}

16.835 Beiträge seit 2008
vor 4 Jahren

Letzten Endes ist das ein Fall für den Debugger.
Mit Hilfe des Debuggers kannst Du solch ein Fehler selbst gerausfinden; warum der Code nicht den Weg geht, den er gehen soll.

[Artikel] Debugger: Wie verwende ich den von Visual Studio?

Als erstes solltest Du mal Deinen Code besser strukturieren; nicht alles immer so eng quetschen.
Eng gequetschter Code hilft Dir nicht den eigenen Code zu verstehen.

Dein Switch ist so aufgebaut, dass Du nicht "C" eingeben musst, sondern den Namen des Kontinents.

Im Endeffekt sieht Dein Switch zur Laufzeit so aus:

  switch ("C")
            {
                case "Asien":
                    Console.WriteLine("Du kommst aus Asien. Cool!");
                    break;
                case "Afrika":
                    Console.WriteLine("Du bist in Afrika geboren! Super!");
                    break;

Das Problem ist nämlich: Deine Case Abfragen gehen nicht auf den String "C" sondern auf die Variable .
Und entsprechend ist der Wert der Variable eben "Nordamerika" und nicht "C".

Mit dem Debugger siehst Du das auch, wenn Du mit dem Mauszeiger entsprechend über die Variablen etc fährst.

S
Saarbrückchen Themenstarter:in
4 Beiträge seit 2020
vor 4 Jahren

Besten Dank für die Antwort.
Offenbar (hoffentlich..) bin ich gerade zu Müde um es zu verstehen.

Ich verlange doch mit

Console.WriteLine("Auf welchem Kontinent bist du geboren?");
            Console.WriteLine("A = Asien | B = Afrika | C = Nordamerika | D = Südamerika | E = Antarktika | F = Europa | G = Australien");
            const string A = "Asien", B = "Afrika", C = "Nordamerika", D = "Südamerika", E = "Antarktika", F = "Europa", G = "Australien";
            string kontinentEingabe = Console.ReadLine();

die Eingabe von A, B, C, D, E, F oder G. Und wenn ich über die Konsole jetzt zB. D für Südamerika eingebe, dann übernimmt er das "D" doch in den Switchblock (switch (kontinentEingabe) ist ja vorhanden) und gibt mir da dann den Text "Du bist aus Südamerika. Mega!" von case D aus.

Du hast mir wahrscheinlich die Lösung auf dem Silberteller präsentiert und ich checke es nur nicht.
Muss vlt. einfach mal ne Pause machen. Bzg. Debuggen lese ich mich mal rein.

16.835 Beiträge seit 2008
vor 4 Jahren

Du verstehst noch nicht wie Variablen funktionieren.

Du machst

const string A = "Asien"

was bedeutet, dass in A nun "Asien" drin steht; eine Zeichenkette.

In dem case machst Du nun

case A:
   Console.WriteLine("Du kommst aus Asien. Cool!");
   break;

Hier zeigst Du auf den Variablen Wert von A - und der ist "Asien".
Ergo geht er nur in das Case rein, wenn Du Asien eingibst.


case A: zeigt auf die Variable A
case "A": zeigt auf den Char "A"

A ohne Anführungszeichen = Variable
A mit Anführungszeichen = Wert "A"

Dein aktuelles Switch hört auf die Inhalte der Variablen; und das sind die Kontinente - nicht die Buchstaben.

S
Saarbrückchen Themenstarter:in
4 Beiträge seit 2020
vor 4 Jahren

Danke nochmals.

Funktioniert jetzt. Werde mich morgen definitiv mal mehr mit Variablen auseinandersetzen, weil so ganz verstehe ich es noch immer nicht. Dachte echt dass das nach zwei Tagen (2-4 Std/Tag) schon sitzen sollte. Lag ich wohl falsch.

Jetzt erstmal...gute Nacht =)

Edit: Habe übrigens das Problem mit den Variablen verstanden. War zu dem Zeitpunkt einfach zu übermüdet.
Danke nochmals.