run = getchar(); // 錯誤:run 未宣告
switch(run) { ... }
char run; 或 int run;(getchar 回傳 int)。scanf("%d%d", &a, &b) 後緩衝區留有 '\n',getchar() 會直接讀到它。解法:
getchar() 前加一個 getchar() 吃掉 '\n'scanf(" %c", &run)(格式字串前加空白跳過空白字元)#include
void action1(int x, int y) { printf("x+y=%d\n", x+y); }
void action2(int x, int y) { printf("x-y=%d\n", x-y); }
void action3(int x, int y) { printf("x*y=%d\n", x*y); }
void action4(int x, int y) { printf("x/y=%d\n", x/y); }
int main() {
int a, b;
printf("請輸入a與b的值:\na:\nb:\n");
scanf("%d%d", &a, &b);
char run;
printf("A加法 B減法 C乘法 D除法\n");
scanf(" %c", &run); // 關鍵:%c 前加空白跳過換行符
switch(run) {
case 'A': action1(a,b); break;
case 'B': action2(a,b); break;
case 'C': action3(a,b); break;
case 'D': action4(a,b); break;
default: putchar('\a'); break;
}
return 0;
}
viod action2 拼寫錯誤 → void action2。#include 缺少標頭檔名 → #include 。修正變數宣告、輸入緩衝區處理與拼寫錯誤後,switch 即可正常分派四則運算功能。