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

C 語言 scanf 進階:格式字符串三類字符、地址表、字符輸入緩衝區陷阱

     編輯:C 語言基礎

scanf 格式字符串三類字符

  1. 格式說明符:同 printf(`%d` `%f` `%s` 等)。
  2. 空白字符:空格、制表、換行 → 掃描時跳過輸入流中**任意數量**空白字符。
  3. 非空白字符:如逗號、冒號 → 掃描時**匹配並丟棄**輸入中對應字符,不匹配則掃描終止。

地址表而非值表

`scanf("%d %d", &a, &b);` 必須傳遞變量地址。
**例外**:字符數組名 `str`、字符串指針 `p` 本身即地址,`scanf("%s", str)` 無需 `&`。

字段寬度限制

`%10s` 限制最多讀 10 字符,防止緩衝區溢出。剩餘字符留給下一掃描項。

經典陷阱:連續字符輸入

scanf("%c", &c1); // 讀 'A'
scanf("%c", &c2); // 讀 '\n' (殘留換行) → c2='\n'

**解決方案**:

  • `scanf(" %c", &c2);` 格式串前置空格跳過空白(推薦)。
  • `fflush(stdin);` 清空輸入緩衝區(非標準,MSVC 支持)。
  • `getchar()` 手動吞掉換行。

總結

scanf 看似簡單,實則暗藏緩衝區、空白匹配、地址傳遞等細節。掌握「格式串三類字符、地址表、字符輸入前置空格」三大法寶,可避開 99% 輸入 Bug。

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