wesley@wesley-VirtualBox:~/c/CH03$ cat switch.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int score;
printf("Enter a score:[0:100]:");
scanf("%d",&score);
if(score < 0 || score > 100)
{
fprintf(stderr,"EINVAL\n");
exit(1);
}
switch(score/10)
{
case 10:
case 9:
puts("A");
break;
case 8:
puts("B");
break;
case 7:
puts("C");
break;
case 6:
puts("D");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
puts("E");
break;
default:
break;
}
exit(0);
}
wesley@wesley-VirtualBox:~/c/CH03$ make switch
cc switch.c -o switch
wesley@wesley-VirtualBox:~/c/CH03$ ./switch
Enter a score:[0:100]:99
A
wesley@wesley-VirtualBox:~/c/CH03$ ./switch
Enter a score:[0:100]:86
B
wesley@wesley-VirtualBox:~/c/CH03$ ./switch
Enter a score:[0:100]:32
E
稍微簡化上面的程序,將剩餘值同意放到default中
wesley@wesley-VirtualBox:~/c/CH03$ cat switch1.c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int score;
printf("Enter a score:[0:100]:");
scanf("%d",&score);
if(score < 0 || score > 100)
{
fprintf(stderr,"EINVAL\n");
exit(1);
}
switch(score/10)
{
case 10:
case 9:
puts("A");
break;
case 8:
puts("B");
break;
case 7:
puts("C");
break;
case 6:
puts("D");
break;
default:
puts("E");
break;
}
exit(0);
}
wesley@wesley-VirtualBox:~/c/CH03$ make switch1
cc switch1.c -o switch1
wesley@wesley-VirtualBox:~/c/CH03$ ./switch1
Enter a score:[0:100]:76
C
wesley@wesley-VirtualBox:~/c/CH03$ ./switch1
Enter a score:[0:100]:32
E
wesley@wesley-VirtualBox:~/c/CH03$
無論兩分支還是多分支,程序不許出現意外情況
switch語句內部的case語句,只能跟常量表達式,不具有判斷能力。 如 case a>b: 不會處理判斷語句。
單引號:字符
雙引號:字符串
每一個分支處理後面都應該加break,否則switch語句不會退出當前case語句,造成的結果是,一次性將滿足各自case條件的輸出全部執行一遍,造成邏輯混亂
有限狀態機, 一定會用到case語句。