Mit switch/case einen Bereich abfragen? (war: Simple Frage für euch [...])



  • Hi,

    folgendes Prob:
    Ich möchte in einem Case Fall eine Variable >1 prüfen, wie muss der case aufgebaut sein?

    So habe ich es versucht, aber das funktioniert nicht.

    switch (x)
    {
    case >1: break;
    }
    

    Brauche dringend eure Hilfe.

    Grüße

    Arndt

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • Dafür nimmt man besser if( x > 1) ...



  • Hi,

    so war es mir auch klar, ich finde switches angenehmer und übersichtlicher zur Programmierung. Wenn es gar nicht funktioniert, nehme ich natürlich einen If, mich hätte trotzdem interessiert, ob man dieß auch mit einem Switch umsetzen kann.

    Grüße

    Arndt



  • Meines Wissens nach geht das in C++ nicht. Du könntest maximal für alle möglichen ints grösser 1 case-Zweige anlegen. Das wäre wohl etwas mühsam. 😉
    In Pascal konnte man (glaube ich) Bereiche angeben.



  • ok, danke Dir.

    Vielleicht haben die anderen ja noch eine Idee?

    Grüße

    Arndt



  • Geht nicht. Nur mit if-then-else kann man bereiche prüfen (leider)

    -junix

    [eidt]Wobei dieses auch nciht unbedingt unübersichtlicher aussieht:

    if (x < 10) // Bereich von 0..9
    {
        do_something();
    }
    else if (x < 20) // Bereich von 10..19
    {
        do_something_else();
    }
    else if (x < 100) // Bereich von 20..99
    {
        dont_do_anything();
    }
    else              // Alles über 100
    {
        do_something_really_different_than_the_first_three();
    }
    

    oder?[/edit]



  • Tach Leute,

    ich programmiere gerade mit dem Arduino in einer auf C++ basierenden Programmsprache

    switch (Value) {
          case 190 ... 230: Taster=1; check++; break;
          case 390 ... 430: Taster=6; check++; break;
          ...
        }
    

    Das wird zumindest vom Arduino so akzeptiert.
    Könnte also beim Programmieren mit dem ursprünglichen C++ auch helfen.
    Falls nochmal jemand den Thread so wie ich über Google findet.

    😃 👍



  • kleinesLicht schrieb:

    case 190 ... 230:
    

    In "echtem" C/C++ ist das leider ein Syntaxfehler.

    Zur Abfrage von Bereichen käme wohl folgendes am nächsten:

    case 1:
    case 2:
    case 3:
        Bereich1bis3();
        break;
    case 27:
    case 28:
    case 29:
    case 30:
        Bereich27bis30();
        break;
    

    Ist bei grösseren Bereichen natürlich auch nicht wirklich elegant.



  • Arndt schrieb:

    Hi,

    switch(n) in C ist wirklich nur für eines da:
    eine elend lange if/else-Orgie über enums zu BESCHLEUNIGEN.

    Sind nämlich die case-values von 0 bis a aufgereiht, müsste die if/else-Orgie im Durchschnitt a/2 Tests machen. Aber voll gute Assembler-Programmierer können die Sprungziele in ein Array legen und direkt "__asm goto tabelle[n]" machen. Damit ist Assembler in diesem kleinen Punkt schnellerals C. Das darf nicht sein. Immerhinque schreibt man in C Betriebssysteme. Darum das komische und im Allgemeinen völlig unnütige Sprachmittel "switch". Es garantierte, daß C so flott ist wie ASM. Darum auch das dumme ++.
    Nu haben wie aber so übergeil-schlaue optimierende Compiler, daß quasi egal ist, wie man was hinschreibt. Ein wenig Historie im Kopforie beschleunigt weiterhin, weil man zum Bleistift in inhaltlich nominalen (nicht ordinalen) enums Lücken meidet.


Log in to reply