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

C語言字符串與格式化輸入輸出完整指南

     編輯:關於C語言

C語言字符串與格式化輸入輸出完整指南

本文系統整理 C 語言字符串本質、printf/scanf 格式控制完整規範、修飾符與標誌位用法,適合作為快速查閱手冊。

一、字符串本質

  • 字符串 = 字符序列,以 \0 (空字符) 結尾
  • C 無專用字符串型別,使用 char 陣列儲存
  • 陣列大小 ≥ 字符數 + 1(留空間給 \0)
  • %s 輸出字符串,遇 \0 停止
  • strlen() 返回字符數(不含 \0),需 <string.h>
  • sizeof 運算元為型別時加括號,變數/常值可不加
  • const 修飾變數為只讀

二、printf 格式控制完整規範

1. 轉換說明符

說明符輸出內容備註
%d / %i有符號十進制整數同義
%u無符號十進制整數
%o八進制整數無前綴
%x / %X十六進制整數小寫/大寫字母
%f十進制浮點數預設 6 位小數
%e / %E科學計數法e/E 區分大小寫
%g / %G自動選擇 %f 或 %e短者優先
%a / %A十六進制浮點數 (C99)p 計數法
%c單一字符
%s字符串至 \0 為止
%p指標地址實現定義格式
%%字面 % 號

2. 修飾符完整表

修飾符位置含義範例
-標誌左對齊%-10d
+標誌正數顯示 + 號%+d
空格標誌正數前加空格% d
#標誌替代形式 (0x, 0, .0)%#x
0標誌前導 0 填充%05d
數字寬度最小欄寬%8d
.*寬度由引數指定寬度%*d
.數字精度小數位/最大字符數%.3f %.5s
.*精度由引數指定精度%.*f
h長度short int%hd
hh長度signed char%hhd
l長度long int / double%ld %lf
ll長度long long int (C99)%lld
L長度long double%Lf
j長度intmax_t (C99)%jd
z長度size_t (C99)%zu
t長度ptrdiff_t (C99)%td

3. 完整格式語法

%[標誌][寬度][.精度][長度]轉換說明符

三、scanf 格式控制

  • 轉換說明符與 printf 大多相同
  • 返回值:成功讀取項目數,EOF (-1) 表示檔案結尾
  • * 抑制賦值:%*d 跳過一個整數
  • 掃描集合:%[abc] 僅讀 a/b/c,%[^abc] 排除 a/b/c
  • 輸入緩衝區機制:輸入先進緩衝區,scanf 按格式提取

四、常見陷阱與最佳實踐

陷阱正確做法
scanf("%s", str) 緩衝區溢出scanf("%19s", str) 限制寬度
%f 讀取 doubledouble 用 %lf,printf 同用 %f
忽略返回值檢查檢查返回值 == 預期項目數
緩衝區殘留換行符干擾 %cscanf(" %c", &ch) 前加空格跳過空白
格式字串與引數不匹配啟用 -Wformat 編譯檢查

五、進階技巧:動態寬度/精度

int w = 8, p = 3;
double val = 3.14159;
printf("%*.*f\n", w, p, val);  // 輸出: "   3.142" (寬度8, 精度3)

掌握格式化 I/O 的完整規範,不僅能避免常見 Bug,更能編寫出對齊美觀、精度可控、健壯性強的輸出代碼。建議收藏本表格作為開發時的快速參考卡。

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