Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Ominięcie break; przy użyciu funkcji switch

Ostatnio zmodyfikowano 2021-06-09 18:18
Autor Wiadomość
Maciej131
Temat założony przez niniejszego użytkownika
Ominięcie break; przy użyciu funkcji switch
» 2021-06-09 13:19:24
Witam, czy w podanym przypadku break; po default: jest potrzebny? Czy default zawsze będzie ostatni w kolejności, czy może być, np. case 1, default, case 2? (Jeśli można, posłużyłem się fragmentem kodu z kursu c++ cpp0xa poziom 1)

C/C++
#include <iostream>
int main()
{
   
int liczba;
   
std::cout << "Podaj liczbe: ";
   
std::cin >> liczba;
   
switch( liczba )
   
{
   
case 2:
       
std::cout << "dwa" << std::endl;
       
break;
   
case 1:
       
std::cout << "jeden" << std::endl;
       
break;
   
case 3:
       
std::cout << "trzy" << std::endl;
       
break;
   
default:
       
std::cout << "ani jeden, ani dwa, ani trzy" << std::endl;
       
break;
   
}
   
return 0;
}
P-178751
DejaVu
» 2021-06-09 13:43:17
Pisz zawsze break. Default chyba jest zawsze wykonywany jako ostatni. Jednak jeżeli chcesz być pewien to przestaw default na samą górę w switchu, uruchom program i wpisz wartość np. 2. Wówczas się okaże czy default wykona się jako ostatni czy kolejność wystąpienia będzie miała jednak znaczenie.

/edit:
A switch statement can have an optional default case, which must appear at the end of the switch. The default case can be used for performing a task when none of the cases is true. No break is needed in the default case.
Źródło: https://www.tutorialspoint.com/cplusplus/cpp_switch_statement.htm

Powyższa informacja sugeruje, że default musi być na końcu switcha. Czyli sugeruje, że albo wystąpi błąd kompilacji jeżeli nie będzie na końcu albo możliwe jest zachowanie niezdefiniowane (tj. w zależności od kompilatora może zachować się inaczej). Strona www to nie dokumentacja standardu C++, więc nie można być pewnym informacji z podanego źródła, jednak tak czy inaczej pisałbym default zawsze na końcu switcha (bo to jest po prostu intuicyjne).
P-178752
pekfos
» 2021-06-09 18:18:09
default nie musi być na końcu, a każdy element wewnątrz switch jest opcjonalny. Etykiety case, default oznaczają tylko punkt od którego należy zacząć wykonywać kod. Jeśli pominiesz break, to kod pod następną etykietą też się wykona, aż do końca switch, lub napotkania break.
C/C++
#include <iostream>

int main()
{
   
for( int i = 1; i < 5; ++i )
   
{
       
switch( i )
       
{
           
std::cout << "???";
           
default:
           
std::cout << "default\n";
       
case 1:
           
std::cout << "jeden: " << i << '\n';
           
break;
           
       
case 2:
       
case 3:
           
std::cout << "dwa lub trzy: " << i << '\n';
       
}
    }
}
jeden: 1
dwa lub trzy: 2
dwa lub trzy: 3
default
jeden: 4
a.cpp: In function 'int main()':
a.cpp:9:17: warning: statement will never be executed [-Wswitch-unreachable]
    9 |    std::cout << "???";
      |                 ^~~~~
P-178753
« 1 »
  Strona 1 z 1