scanf("%d,%d", &a, &b);
// 用戶輸入:10 20 (空格分隔)
// 結果:a=10, b=0 (或亂碼),第二個 %d 匹配失敗
scanf 格式字串**字面匹配**非格式字元。"%d,%d" 要求輸入中**必須有一個逗號**分隔兩個整數。
| 格式字串 | 合法輸入範例 | 說明 |
|---|---|---|
10,20 / 10, 20 / 10 ,20 | 逗號前後可有空白 | |
10 20 / 10\n20 / 10\t20 | 任意空白分隔(推薦通用) | |
1,2,3 | 多欄位同理 |
int a, b;
int ret = scanf("%d %d", &a, &b); // 改用空格分隔,兼容性最好
if (ret != 2) {
// 輸入格式錯誤處理
while (getchar() != '\n'); // 清理殘留緩衝區
return;
}
printf("max=%d\n", (a > b ? a : b));
bool readInt(int *out) {
char buf[64];
if (!fgets(buf, sizeof(buf), stdin)) return false;
char *end;
long val = strtol(buf, &end, 10);
if (end == buf || *end != '\n' && *end != '\0') return false; // 非純數字
*out = (int)val;
return true;
}
scanf("%d,%d") **強制要求逗號**。日常輸入請用 scanf("%d %d") 或 fgets + strtol,並**務必檢查返回值**,否則輸入錯誤會導致變量未初始化、後續邏輯崩潰。