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

C語言scanf格式字符串陷阱:逗號與空格的區別

     編輯:C 語言問答

問題現場

scanf("%d,%d,%d", &a, &b, &c);

輸入 1 2 3(空格分隔)時,程式卡住或讀取錯誤。

根本原因

scanf 格式字符串中的非格式字符(如逗號 ,、冒號 :、斜槠 /)會強制要求輸入流中出現完全相同的字符。

  • "%d,%d,%d" → 必須輸入 1,2,3(含逗號)。
  • "%d %d %d" 或 "%d%d%d" → 任意空白字符(空格、Tab、換行)均可分隔。

最佳實踐

  1. 優先使用 "%d %d %d"(顯式空格)或 "%d%d%d",兼容性最強。
  2. 若業務必須解析 CSV,先 fgets 讀整行,再用 sscanf(line, "%d,%d,%d", ...) 或 strtok 分割。
  3. 檢查返回值:if (scanf("%d,%d,%d", &a,&b,&c) != 3) { /* 錯誤處理 */ }。

補充:%c 的特殊性

%c 不跳過空白字符,若需跳過前導空白,用 " %c"(格式字符串前加空格)。

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