C# Else Befehl?

Status
Für weitere Antworten geschlossen.

Gary12345

Ensign
Registriert
Sep. 2012
Beiträge
246
Hallo,

Code:
static void Main(string[] args)
        {
            string choice;
            string begr;
            int alter;
            
            Console.WriteLine("Dieses Programm wurde in C# geschrieben");
            Console.WriteLine("Hallo, liebe Gemeinde, dass ist mein erstes Programm, dass ich in C# geschrieben habe.");
            Console.WriteLine("Hallo, wie gehts");
            
            choice = Convert.ToString(Console.ReadLine());

            if (choice == "gut") ;
            
            {
                Console.WriteLine("Das finde ich aber schön, dass es Dir gut geht :");
            }
            
            if (choice == "schlecht") ;
            
            {
                Console.WriteLine("Warum denn das?");
                begr = Convert.ToString(Console.ReadLine());
            }
            
            if (begr == "Da ich krank bin") ;
            
            {
                Console.WriteLine("Dann wünsch ich Dir mal eine gute Besserung.");
                Console.WriteLine("Wie alt bist Du denn?");
                alter = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine("Du bist:" + alter + "Jahre alt");
                
            }
            

            //Warten, bis Key gedrückt wurde 
            Console.ReadKey();


        }

Immer wenn ich schlecht schreibe (auf der Frage, wie es mir geht), dann kommt auch die Merldung, dass das Programm es schön befindet, dass es mir gut geht, obwohl ich schlecht eingegeben habe. Ich kenne es aus der anderen Programmiersprache so, dass es denn Befehl "sonst" gibt (else) . Wäre das hier auch möglich. Ich sehe nur else if, aber nicht else. Schwer für mich, leicht für euch.

Danke
 
Natürlich kannst du hinter den if{ } Block einfach einen weiteren else{ } Block setzen, das geht ohne Weiteres. Dass dein Programm in die falsche if-Anweisung springt, ergibt aber irgendwie keinen Sinn.

edit: Oops, ok doch :D
 
Zuletzt bearbeitet:
if (choice == "schlecht");

Das Semikolon muss raus.

Jetzt denkt nämlich Dein Programm, dass nach der Schleife schon die Anweisung kommt, die aber in Deinem Fall leer ist. Du könntest ja zum Beispiel auch schreiben:

if (choice == "gut") Console.WriteLine("Das finde ich aber schön, dass es Dir gut geht :");

Das müsste ohne Probleme funktionieren. Ist natürlich kein schöner Programmierstil.
 
Das ; hinter den if() muss weg ;) So hast du nur eine if mit einer leeren Anweisung. Dann kannst du auch else nutzen.

Habe keine Erfahrung in C#, in anderen Sprachen trifft das aber zu, ich denke, es ist in C# genauso.
 
Code:
if (choice == "gut");
            
            {
                Console.WriteLine("Das finde ich aber schön, dass es Dir gut geht :");                        
            }
            else();
            {

            }

Also, else soll falsch sein, WO soll ich das setzen? IN Xprofan war das genau da, wo ich das jetzt setze?

Also liegt der Fehler nicht bei mir, sondern ein BUG von C#? HÄ?
 
Code:
if (choice == "gut")
            
            {
                Console.WriteLine("Das finde ich aber schön, dass es Dir gut geht :");                        
            }
            else
            {
 
            }

So sollte es funktionieren.

Das ; beendet immer eine Anweisung. Wenn du es direkt hinter das if() setzt, hast du eine if mit einer einzigen leeren Anweisung, sprich, sie macht letztenendes nichts. Die {} grenzen nur einen Block ein, der allerdings durch die mit dem ; bereits beendete if nicht mehr zu selbiger gehört und damit einfach nur einen freien, deplatzierten Block im Code darstellt.
 
OK , aber bei diesem Codeabschnitt: if (mann == "Da ich krank bin") sagt es folgendes: Verwendung der nicht zugewiesenen lokalen Variablen "mann"

Deklariert ist sie mit

string mann;

Was ist da falsch?
 
Weil mann "null" bzw nichts ist, kann es nicht überprüfen.
Du musst

string mann = "";
oder
string mann = string.Empty

schreiben.
 
Du musst deine Variablen initialisieren, wenigstens mit dem Leerwert, da dir ansonsten dein Programm um die Ohren fliegt.
Jedenfalls bei Objekten und ein String ist ein Objekt, bei int, float usw., also den primitiven Datentypen ist das für solche Fälle egal.

Du kannst solche Meldungen aber auch prima bei Google suchen, nur für die Zukunft.
Entweder du findest in Boards etwas oder aber bei Microsoft Technet in der Dokumentation.

Edit: Genau, so wie Bagbag es schreibt.
 
Zuletzt bearbeitet: (nicht Problem, sondern Programm ^^)
Code:
if (choice == "schlecht")
            
            {
                Console.WriteLine("Warum denn das?");
                mann = Convert.ToString(Console.ReadLine());
            }

            else if (mann == "Da ich krank bin")          
            {
                Console.WriteLine("Dann wünsch ich Dir mal eine gute Besserung.");
                Console.WriteLine("Wie alt bist Du denn?");
                alter = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine("Du bist:" + alter + "Jahre alt");
                
            }

OK den Fehler habe ich gefunden -das mann tritt nur auf, wenn es einem schlecht geht. Aber wie kann ich trotzdem darauf zugreifen - habe es bereits mit else if probiert - scheint aber nicht zu funken?
Ergänzung ()

aber wenn ich es ausführe geht das Programm?
 
Würde es nicht sowieso Sinn machen zur Fehlerbehandlung erstmal einen null-String abzufangen?
 
So wie ich dein Problem verstehe, müsstest du den if-Block, in dem mann geprüft wird, mit in den Codeblock der ersten if setzen.
 
Code:
string choice;
            string mann;
            int alter;
            
            Console.WriteLine("Dieses Programm wurde in C# geschrieben");
            Console.WriteLine("Hallo, liebe Gemeinde, dass ist mein erstes Programm, dass ich in C# geschrieben habe.");
            Console.WriteLine("Hallo, wie gehts");
            
            choice = Convert.ToString(Console.ReadLine());

            if (choice == "gut")
            
            {
                Console.WriteLine("Das finde ich aber schön, dass es Dir gut geht :");                        
            }

            if (choice == "schlecht")
            
            {
                Console.WriteLine("Warum denn das?");
                mann = Convert.ToString(Console.ReadLine());
            }

            else if (mann == "Da ich krank bin")          
            {
                Console.WriteLine("Dann wünsch ich Dir mal eine gute Besserung.");
                Console.WriteLine("Wie alt bist Du denn?");
                alter = Convert.ToInt16(Console.ReadLine());
                Console.WriteLine("Du bist:" + alter + "Jahre alt");
                
            }

Mir ist noch was aufgefallen?! Es wird eine Zeile angezeigt, die ich im Code schon vor dem ausführen gelöscht habe! Warum wird sie denn noch angezeigt?
Ergänzung ()

Das andere Problem scheint gelöst zu sein :)
 
Ja, der ElseIf-Zweig wird nur abgefragt, wenn der vorherige If oder ElseIf-Zweig negativ ausgewertet wurde.
Ist choice jetzt also "schlecht" ist die Abfrage positiv und dein ElseIf-Zweig wird gar nicht behandelt.

Du willst ja nur fragen, warum ihm schlecht wenn du weißt, dass ihm schlecht ist.
Das musst du eben entsprechend umsetzen.

Nicht stumpf probieren, überlegen ;)

Edit: Zu der Zeile die angezeigt wird: Auch die Datei gespeichert vor dem Kompilieren und Ausführen?
 
Zuletzt bearbeitet:
OK habe den elseif befehl falsch interpretiert O.o - nur das Problem bleibt immer noch, dass dei gelöschte Zeile im COde immer noch angezeigt wird.
 
Hier musst du die IFs ineinander verschachteln.
mann wird nur dann mit einem Wert belegt, wenn choice == "schlecht" ist. Ansonsten hat es immer noch den Wert, den es vor dem IF hatte.

Btw, du scheinst das Konzept nicht ganz verstanden zu haben.
Wenn da steht:
Code:
If (BedingungA)
{
    TuDies();
}
Else If (BedingungB)
{
    TuDas();
}
Else
{
    TuEtwas();
}
dann bedeutet es:
- Wenn die BedingungA wahr ist, dann macht er TuDies() und nichts anderes!
- Wenn die BedingungB wahr ist und BedingungA nicht wahr ist, dann macht er TuDas() und nichts anderes.
- Ergeben weder BedingungA noch BedingungB wahr, dann führt er TuEtwas() aus.


Das bedeutet weiterhin, dass eine Variable, die bei TuDies() gesetzt wird, nicht einfach bei BedingungB auf einen Wert geprüft werden darf. Denn dort kommt er nicht an. Nach TuDies() springt er hinter das letzte ELSE und führt das Programm dort weiter aus (bei meinem Beispiel ist das Zeile 13). Er sieht das IF - ELSE IF - ELSE quasi als ein Befehl.
 
Auch die Datei gespeichert vor dem Kompilieren und Ausführen?

Ja :)
Ergänzung ()

@e-laurin)

Habe ich verstanden :) Hab ja nur nur die else if abfrage falsch interpretiert! ;)
Ergänzung ()

OK Problem selbst gelöst! Also man kann in If Verzweigungen andere If Verzweigungen verschachteln?
 
Jo, macht nichts. Es ist noch kein Meister vom Himmel gefallen. ;)
Wenn jetzt alles klar ist, dann viel Spaß beim Weiterproggen.


Nachtrag:
Es empfiehlt sich, Strings mit Equals() zu vergleichen.
Dann sähe das zB so aus: If (choice.Equals("Ick war dat nich!") == true)

Nachtrag #2:
Verschachtelung geht einfach. ;)
Code:
If (BedingungA == true)
{
    TuDies();

    If (BedingungB == true)
    {
        TuDas();
    }

    TuEtwas();
}
Wenn BedingungA == true ist, dann führt er TuDies() aus. Ist dann zusätzlich noch BedingungB == true, dann führt er TuDas() aus. Und danach führt er TuEtwas() aus.
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
Zurück
Oben