#include
main()
{
int a;
a = scanf("%d,&a); // 格式字串未閉合、&a 位置錯誤
int b;
b = scanf("%b",&b); // %b 非標準格式、未閉合雙引號
printf("%d\n",a+b);
}
| 行 | 錯誤 | 說明 |
|---|---|---|
| 5 | "%d,&a) | 格式字串缺少結束雙引號,&a 應在引號外 |
| 7 | "%b",&b) | %b 非標準輸入格式 (應為 %d 整數),同樣缺少引號 |
| 6 | a = scanf(...) | scanf 回傳成功讀取項目數,非輸入值本身 |
| 8 | int b | 缺少分號 |
#include
int main() {
int a, b;
printf("請輸入兩個整數 (空白分隔): ");
// scanf 回傳成功讀取的項目數,正確讀取兩個整數時回傳 2
if (scanf("%d %d", &a, &b) == 2) {
printf("a = %d, b = %d\n", a, b);
printf("a + b = %d\n", a + b);
} else {
printf("輸入格式錯誤,請輸入兩個整數。\n");
return 1;
}
return 0;
}
"%d %d" 連續讀取兩個整數,中間空白自動跳過&a, &b 傳遞變數位址供 scanf 寫入int main() 並 return 0int a, b;
char buf[100];
while (1) {
printf("請輸入兩個整數: ");
if (fgets(buf, sizeof(buf), stdin)) { // 讀取整行
if (sscanf(buf, "%d %d", &a, &b) == 2) {
break; // 解析成功跳出迴圈
}
}
printf("格式錯誤,請重新輸入。\n");
}
printf("結果: %d + %d = %d\n", a, b, a + b);
使用 fgets + sscanf 避免 scanf 留殘留字元在緩衝區導致後續讀取異常。