編譯錯誤秒懂:if a,b 不是變量聲明
錯誤代碼
if a,b // ❌ 編譯錯誤:if 後必須跟條件表達式,不能聲明變量
int a,b,sum=0,i; // 這行正確但位置錯誤
錯誤原因
if 是**選擇語句**,語法:if (expression) statement。
a,b 是**聲明** (或逗號表達式),不能直接跟在 if 後。
- 可能意圖:
int a, b, sum = 0, i; 定義變量,放在函數開頭或塊開頭 (C89) / 任意位置 (C99+)。
修正版:輸入兩整數求區間偶數和
#include <stdio.h>
int main(void) {
int a, b, sum = 0, i;
printf("輸入兩個整數 (空格分隔): ");
if (scanf("%d %d", &a, &b) != 2) return 1;
// 確保 a <= b
if (a > b) { int t = a; a = b; b = t; }
// 找第一個偶數
int start = (a % 2 == 0) ? a : a + 1;
for (i = start; i <= b; i += 2) sum += i;
printf("區間 [%d, %d] 偶數和 = %d\n", a, b, sum);
return 0;
}
變量定義規範 (C99/C11)
- 可在**塊內任意位置**定義變量 (不必在開頭)。
- 推薦**就近定義、初始化**、**縮小作用域**。
- 循環變量在
for (int i=...) 中定義 (C99)。
常見新手語法錯誤速查
| 錯誤代碼 | 問題 | 修正 |
if a > b | 缺括號 | if (a > b) |
for i=0; i<10; i++ | 缺括號 | for (int i=0; i<10; ++i) |
int a = 1, b = 2; if (a=b) ... | 賦值而非比較 | if (a == b) |
scanf("%d", a) | 缺取址符 | scanf("%d", &a) |
void main() | 非標準返回類型 | int main(void) |