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

C語言格式化輸入輸出深度解析:scanf/printf格式控制、字符輸入陷阱與getchar/putchar用法

     編輯:關於C語言

掌握 C 語言輸入輸出的核心細節

輸入輸出是程序與外部交互的橋梁。C語言通過 scanf/printf 格式化函數及 getchar/putchar 字符函數實現 I/O,但格式控制字符串的細節往往決定程序的健壯性。

一、scanf 格式控制字符串完整語法

%[*][寬度][長度]類型
組成說明示例
類型數據類型標識d(十進制整數) o(八進制) x(十六進制) u(無符號) f/e(實數) c(單字符) s(字符串)
*跳過該輸入,不賦值scanf("%d %*d %d", &a, &b); 輸入 1 2 3 → a=1, b=3
寬度最大讀取字符數%5d 輸入 12345678 → 讀 12345
長度數據長度修飾l: long/%ld, %lf; h: short/%hd

二、scanf 使用五大避坑指南

  1. 無精度控制:%5.2f 非法,不能限制小數位數。
  2. 必須傳地址:scanf("%d", a) 錯誤,正確 scanf("%d", &a)。
  3. 數值輸入分隔符:格式串無非格式字符時,空格/Tab/換行均可作分隔;遇非法字符(如 %d 讀到 A)停止。
  4. 字符輸入特殊規則:
    • %c%c%c 無分隔符 → 輸入 d e f 實際讀到 'd',' ','e'(空格也是字符)。
    • 需讀連續字符請輸入 def,或格式串加空格 %c %c %c 允許分隔。
  5. 非格式字符必須原樣輸入:scanf("%d,%d", &a, &b) 輸入必須為 5,6;scanf("a=%d", &a) 輸入 a=5。

三、類型不匹配的隱患

int a; scanf("%d", &a); printf("%ld", a); // 錯誤:%ld 期望 long,實傳 int
// 修正:long a; scanf("%ld", &a); printf("%ld", a);

輸入輸出格式符必須與變量類型嚴格對應,否則結果不可預期。

四、getchar / putchar 字符級 I/O

char c = getchar();  // 讀取單字符,含換行符
putchar(c);          // 輸出單字符,等價 printf("%c", c)

注意:

  • 僅接收第一個字符,多餘字符留在緩衝區。
  • 需包含 <stdio.h>。
  • TC 環境下運行會切換到用戶屏幕等待輸入。

五、綜合應用案例

案例 1:小寫轉大寫(利用 ASCII 碼差 32)

char a, b;
scanf("%c %c", &a, &b);
printf("%c%c\n%d%d\n", a-32, b-32, a, b);

案例 2:sizeof 統計類型字節數

int a; long b; float f; double d; char c;
printf("%d,%d,%d,%d,%d", sizeof(a),sizeof(b),sizeof(f),sizeof(d),sizeof(c));

精通格式控制字符串的每一個修飾符、理解緩衝區行緩衝特性、區分數值與字符輸入的分隔規則,是編寫健壯 C 程序、避免「輸入莫名其妙失敗」的關鍵功夫。

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