首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言 scanf 輸入格式陷阱:%d,%d 需輸入逗號分隔,非空格

     編輯:程式設計疑難解答

錯誤現場

scanf("%d,%d", &a, &b);
// 用戶輸入:10 20 (空格分隔)
// 結果:a=10, b=0 (或亂碼),第二個 %d 匹配失敗

原因解析

scanf 格式字串**字面匹配**非格式字元。"%d,%d" 要求輸入中**必須有一個逗號**分隔兩個整數。

正確輸入示範

"%d,%d""%d %d""%d,%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,並**務必檢查返回值**,否則輸入錯誤會導致變量未初始化、後續邏輯崩潰。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved