A instrução switch — desvio por valor inteiro. case, break, default e fallthrough.
switch (x) { case 1: ... break; default: ...; }break; ao fim de cada casedefault roda quando nenhum case batebreak)case precisam ser expressões constanteselse if agora está na Aula 8 (instrução if). Encadear else if é só uma extensão de if/else, então pertence a ela. Esta página foca em switch — uma construção diferente que despacha pelo valor de um inteiro.
int day = 3; switch (day) { case 1: printf("Segunda\n"); break; case 2: printf("Terca\n"); break; case 3: printf("Quarta\n"); break; default: printf("Desconhecido\n"); }
int, char etc.). Você não pode dar switch em doubles ou strings.break;, a execução "cai" no próximo case e continua rodando — uma fonte clássica de bugs.switch (n) { case 1: printf("A\n"); // sem break! case 2: printf("B\n"); // sem break! case 3: printf("C\n"); break; } // Quando n=1: imprime A, B e C!
breakday 1–3, mas esqueceu todos os break:
int day = 1; switch(day){ case 1: printf("Seg\n"); // sem break case 2: printf("Ter\n"); // sem break case 3: printf("Qua\n"); // sem break default: printf("Desconhecido\n"); }
Seg
Ter
Qua
Desconhecidocase 1; em vez de case 1:?: e o ponto e vírgula ; ficam lado a lado no teclado, então esse typo aparece o tempo todo.
switch(day){ case 1; // ← digitou ; em vez de : printf("Seg\n"); break; }
error: expected ':' or '...' before ';' token: depois de case 1 para completar o rótulo.
: depois de case marca um rótulo (mesma sintaxe dos rótulos de goto). Instruções terminam com ;; rótulos terminam com :.
default; em vez de default:default também é um rótulo. default; pode compilar (como uma instrução vazia), mas vira um bug silencioso — o ramo "nenhum case bateu" nunca roda.
break de propósito. Coloque um comentário para os revisores saberem que é proposital:case 1: case 2: printf("pequeno\n"); break; // intencional
default para capturar valores não correspondidosbreak de propósito para ver o fallthrough'a') em rótulos casecase 1: case 2:)Teste seu entendimento desta aula!
Sem break, a execução continua rodando em todos os cases que vêm depois do que foi encontrado. Isso se chama "fallthrough".
default é opcional, mas geralmente vale incluir para ter um lugar para lidar com valores não correspondidos.
switch só aceita tipos inteiros (int, char etc.). float e double não são permitidos.