switch (運算式) {
case 常量1: 語句1; break;
case 常量2: 語句2; break;
...
default: 語句n+1;
}
語義:計算運算式值,逐一比較 case 常量。相等則執行後續所有語句(貫穿特性),直到 break 或結束。無匹配執行 default。
// 錯誤:無 break,輸入 3 輸出 Wednesday 到 Sunday 及 error
switch (a) {
case 1: printf("Monday\n");
case 2: printf("Tuesday\n");
...
}
// 正確:每個 case 後加 break
switch (a) {
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
...
default: printf("error\n");
}
case 常量值不可重複case 後可多語句,無需 {}case/default 順序可任意調換default 可省略
void main() {
float a,b,s; char c;
scanf("%f%c%f", &a, &c, &b);
switch(c) {
case '+': printf("%f\n", a+b); break;
case '-': printf("%f\n", a-b); break;
case '*': printf("%f\n", a*b); break;
case '/': printf("%f\n", a/b); break;
default: printf("input error\n");
}
}
while (運算式) 語句;
// 先判斷,真執行循環體,假跳出
void main() {
int n=0;
while (getchar() != '\n') n++;
printf("%d", n);
}
{}
while (a=5) printf("%d", n++); // a=5 永真,無修改 a → 死循環