Instrukcja switch

Instrukcja switch
RU
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 5 lat
  • Postów:6
0

Instrukcja switch, czy da sie podac zakres dla case np 0-10 to wypisuje cos itp.. czy trzeba robic case 1: case 2:.... case 10: ?

edytowany 1x, ostatnio: kq
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około godziny
  • Lokalizacja:Szczecin
2

Nie da się, trzeba robić każdy case.


cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Poznań
  • Postów:8796
0

Ewentualnie, jeśli przedziały są równe i regularne (np. 1-10, 11-20, 21-30 itp.) możesz wprowadzić jakąś zmienną pomocniczą, która będzie miała wartość "dziesiątek" (czyli dla 1-10 będzie miała 0, 11-20 wartość 1, 21-30 wartość 2 itp.) a potem zrobić switch ale podając tą drugą zmienną jako wartość porównywaną.

Jeśli te przedziały są różnych rozmiarów, albo z innego powodu nie da się ich tak prosto określić, to zamiast robić case 1: case 2: itp., lepiej zrobić coś w stylu if (X>0 && X<11).


Spearhead
  • Rejestracja:prawie 6 lat
  • Ostatnio:około godziny
  • Postów:1002
3

GCC ma takie rozszerzenie

Kopiuj
#include <iostream>

int main(int argc, char **argv) {
    int i = 10;
    switch(i) {
    case 0 ... 100:
        std::cout << "OK\n";
    break;
    default:
        std::cout << "NOT OK\n";
    }
}
Kopiuj
$ g++ test.cpp -o test
$ ./test 
OK
Zobacz pozostały 1 komentarz
B2
jak i > 100 to też pokazuje "OK" chyba że komputr mi się zepsuł albo nie o to chodzi
MarekR22
sporo kompilatorów to łyka. Niestety MSVC nie: https://godbolt.org/z/CC2ASr
Azarien
@MarekR22: o ile zależy nam na MSVC - bo wystarczy że kod działa w GCC i w Clangu i już mamy obsłużoną praktycznie każdą platformę...
B2
na g++ (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1) działa
Spine
  • Rejestracja:około 22 lata
  • Ostatnio:minuta
  • Postów:6656
0

Wyjątki (liczby spoza zakresów) zrób jako poszególne case'y. A w default zrób if'ami zakresy.


🕹️⌨️🖥️🖱️🎮
edytowany 2x, ostatnio: Spine
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:3 miesiące
1

Ja bym zrobił unorderewd_map na zakresy, następnie unordered_map na metody


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:około godziny
  • Lokalizacja:Szczecin
1

Jak to ogromne zakresy to moze zwykla mapa i szukanko lower_bound.


edytowany 1x, ostatnio: kq
kq
Ktoś tu nie czyta swoich postów przed kliknięcęm ctrl+enter :​P

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.