switch - wie aufbauen?



  • hello @ll

    also ich hab da ein paar probleme mit der switch anweisung und weiss nicht wo ich da anfangen soll 😕

    float anweisung;
    float brot = 0;
    
    switch(anweisung) {
    case:
    ++brot;
    break;
    }
    
    cout<<brot;
    

    Dabei weiß ich nicht,was rauskommen würde.
    Aber wie baut man so eine Switch anweisung eigentlich auf und welche Parameter darf drinnen stehen in case: usw..?

    em 😉



  • Hallo em2006!

    Also allgemein ist die switch-case-Verzweigung wie folgt aufgebaut:

    switch(ausdruck)
    {
        case ausdruck_a: anweisung_a;
                         break;
        case ausdruck_b: anweisung_b;
                         break;
    }
    

    Grundsätzlich kann eine switch-case-Anweisung mit Integer und Chars aber auch den ASCII-Werten, Oktalwerten und Hexwerten der Chars ausgeführt werden.

    z.B.:

    int zahl;
    
    cout << "Eingabe einer Zahl: ";
    cin >> zahl;
    
    switch(zahl)
    {
        case 1: cout << "Zahl = 1";
                break;
        case 2: cout << "Zahl = 2";
                break;
        case 3: cout << "Zahl = 3";
                break;
    }
    
    getch();
    return 0;
    

    Mehr Infos gibts hier



  • wobei es wichtig ist generell ein "default" einzubauen um etwaige Fehler abzufangen 😉



  • Man kann ein switch aber auch mit einer return-Anweisung 'verlassen' (man verlässt damit auch die 'übergeordnete' Funktion), weshalb das:

    Kuldren schrieb:

    wobei es wichtig ist generell ein "default" einzubauen um etwaige Fehler abzufangen 😉

    nicht unbedingt nötig ist.



  • Wie hängt das mit return verlassen und default für fehler miteinander zusammen? Nur weil ich ein case mit return verlasse kann es immer noch fehler geben.



  • CodeFinder schrieb:

    Man kann ein switch aber auch mit einer return-Anweisung 'verlassen' (man verlässt damit auch die 'übergeordnete' Funktion), weshalb das:

    Schlechte Idee.

    Kuldren schrieb:

    wobei es wichtig ist generell ein "default" einzubauen um etwaige Fehler abzufangen 😉

    nicht unbedingt nötig ist.

    Ich bin für das default.



  • Es geht aber!



  • [20:51:49] <M6eis6ter6> hmhm... weil ichs grad im forum gelesen hab... was is so schlimm daran, aus nem switch mit einem return "auszubrechen"?
    [20:52:02] <volkard> return aus switch ist super.
    [20:52:12] <volkard> kein besseres switch-ende ist denkbar.
    [20:52:55] <M6eis6ter6> volkard: seh ich auch so...



  • EDIT: war quatsch



  • @volkard:

    Hm Begründung ?



  • CodeFinder schrieb:

    @volkard:
    Hm Begründung ?

    im zuge der einfachheit returned man, sobald das ergebnis feststeht.
    wenn pro case was ganz unterschiedliches getan wird (auch izde zu empfehlen), muß das also so sein.
    will man vorher gemeinsames {dann des switch} dann wieder gemeinsames machen, ist vermutlich der switch in einer eigenen funktion wohl daheim.



  • also danke euch 😉

    1-> kann man eigentlich auch bei der switch soetwas wie if daraus machen?
    2-> gibt es keine andere Möglichkeit switch zu verwenden,ohne cin>> verwenden zu müssen,sondern einfach

    switch(ein_int)
    {
    case ..: ..
    
    ...
    

    eingeben muss?



  • em2006 schrieb:

    1-> kann man eigentlich auch bei der switch soetwas wie if daraus machen?

    der switch wurde eingeführt, damit man nicht immer else if(a == b) schreiben muss, also ja ein swich ist eigentlich immer komplett durch eine verkettung von else if ketten ersetzbar, dies ist aber weil es den swich gibt wenig sinnvoll.

    em2006 schrieb:

    2-> gibt es keine andere Möglichkeit switch zu verwenden,ohne cin>> verwenden zu müssen,sondern einfach

    switch(ein_int)
    {
    case ..: ..
    
    ...
    

    eingeben muss?

    swich ist vollkommen unabhängig von cin, wenn du iostream nicht eingebunden hast, kannst du cin garnicht mal verwenden, aber swich funzt, also um deine Frage zu beantworten: Doch es funz genau so wie du geschrieben hast. Um die sacheübersichtlich zu machen verwendet man anstelle von einem int aber lieber ein enum, um den Zahlen eine Bedeutung zu geben.



  • Krux schrieb:

    der switch wurde eingeführt, damit man nicht immer else if(a == b) schreiben muss, also ja ein swich ist eigentlich immer komplett durch eine verkettung von else if ketten ersetzbar, dies ist aber weil es den swich gibt wenig sinnvoll.

    falsch. c++ ist nicht basic.
    switch wurde eingeführt, weil man in asm springen kann auf eine in einer tabelle nachgeguckten adresse (ok, kann man in basic mit on...goto auf dem commodore 64 auch und mit goto x*5+8 auf dem sinclair zx81 auch, aber das gildet nicht, wir nehmen mal nur compilersprachen) und damit bei n sprungzielen O(1) hat und mit der if-orgie mit O(n) abkackt. desdawegen kann switch ja nur integrale konstanten.
    merke: c++ ist nur c mit ein wenig syntaktischem zucker und c ist nur ein etwas besserer makroassembler. wer mir das nicht glaubt, fragt bitte marc++us. der hat ahnung.
    daß c++ dennoch gut taugt, saugroße programme zu schreiben, hat etwas mit bescheidenheit zu tun. aber das ist nicht hier das thema. vielleicht nur als anker: die programmqualität folgt der problemverständnisqualität.

    edit: beim durchlesen stelle ich fest, daß ich mein posting ja selber nicht verstehe. ich würde mich darüber freuen, wenn jemand, der mich versteht, es so umschreibt, daß meine oma es versteht. bei gelingen biete ich dem erklärenden für zwei jahre einen link von meiner www-haupt-seite auf des erklärers seite unter dem text "ErklärBär".



  • Also erstmal danke für Deine Erlärung oben 😉 .

    Also ich hab Deinen letzten Post schon verstanden 😃 ... Aber ich persönlich, finde es angenehmer, wenn du mal Groß- und Kleinschreibung achtest, dann ist es nämlich meiner Meinung nach einfacher, deine Erklärung(en) nachzuvollziehen 😉 (Nicht böse gemeint!!!).



  • gute nacht 😋

    Könnt ihr mir bitte erklären,wie man so eine switch schreibt bzw. beschreibt,wie ich so eine schreibe,ohne dass ich cin>> oder etwas ähnliches verwenden muss,nur wenn zbsp. die Werte

    int apfel = 12;
    int birne = 4;
    

    drauf sind?

    Und wie baut sich so eine switch auf?

    lg. em2006 😉



  • Also, diese Frage wurde dir doch nun wohl schon hinreichend beantwortet. Gleich im ersten Antwort-Post hast du ein Beispiel für ein Switch-Konstrukt. Wenn dir das cin nicht paßt, dann nimmt halt die Zeile

    cin >> zahl;

    raus und belege an dieser Stelle Zahl auf andere Weise mit einem Wert.



  • em2006 schrieb:

    gute nacht 😋

    Könnt ihr mir bitte erklären,wie man so eine switch schreibt bzw. beschreibt,wie ich so eine schreibe,ohne dass ich cin>> oder etwas ähnliches verwenden muss,nur wenn zbsp. die Werte

    int apfel = 12;
    int birne = 4;
    

    drauf sind?

    Und wie baut sich so eine switch auf?

    lg. em2006 😉

    Meinste sowas?

    const int apfel = 12;
    const int birne = 4;
    int zahl = apfel;
    switch ( zahl )
    {
        case apfel: 
            // ...
        break;
        case birne: 
            // ...
        break;
        default:
            // ...
    }
    

    Wichtig ist das apfel und birne Konstanten sind, weswegen man ja auch normalerweise ein enum definiert.

    enum Ost
    {
        apfel, birne
    }
    


  • warum muss es konstant sein?



  • em2006 schrieb:

    warum muss es konstant sein?

    damit der compiler draus eine sprungzieltabelle basten kann.


Log in to reply