本章將介紹 C 語言中字串的處理方式、常量的定義,以及 printf() 和 scanf() 兩大核心格式化 I/O 函數的深度用法。
字串本質上是一個或多個字符的序列(如 "Zing went"),雙引號僅作為定界符,不屬於字串內容。
char 數組與空字符C 語言沒有專門的字串類型,而是將字串存儲在 char 數組中。字符佔據相鄰的存儲單元,每個字符一個單元。數組最後一位存放空字符 \0,作為字串結束的標誌。因此,數組大小至少要比實際字符數多 1。
使用 %s 格式符可讓 printf() 輸出字串。scanf() 讀取輸入時會自動在末尾添加 \0,但會在遇到第一個空白字符(空格、製表符、換行符)時停止讀取。注意:'x' 是字符常量(基本類型),而 "x" 是字串字面量(派生類型,即數組)。
strlen() 函數sizeof 以位元組為單位返回數組總大小,而 strlen() 以字符為單位返回字串實際長度(不含 \0)。例如:char name[40] 時 sizeof name == 40;char name[] = "Mo" 時 sizeof name == 3(含結束符)。
#define NAME value 會在編譯階段用 value 替換所有的 NAME,這稱為「編譯時代入法」。由於是文本替換機制,故行末不加分號。
const 修飾符C90 標準引入 const 關鍵字,可將變量聲明為常量,例如 const int MONTHS = 12;。
頭文件 limits.h 和 float.h 分別定義了整數與浮點類型的取值範圍,如 INT_MAX、INT_MIN 等。
printf()printf() 根據變量類型選擇轉換說明(%c、%d 等)將數據轉為可顯示形式。%% 輸出百分號;%g 根據數值自動選擇 %f 或 %e。函數使用的是值(變量、常量或表達式的結果)。
-:左對齊+:有符號值顯示正負號空格:正值前加空格,負值顯示減號#:啟用替代形式(如強制顯示小數點)0:數值格式以 0 填充寬度而非空格printf() 返回實際輸出的字符數(不含 \0);發生輸出錯誤時返回負數。
若兩個雙引號字串僅由空白字符分隔,編譯器會自動將它們連接為一個字串。例如 "young" "lovers" 變為 "younglovers"。
scanf()讀取基本類型變量時需在變量名前加 & 取地址;但讀取字串到字符數組時,數組名本身即地址,不可加 &。scanf() 遇空白字符停止讀取。
* 修飾符的妙用printf() 中:用 * 代替寬度或精度數值,由參數動態指定。例:printf("Weight = %*.*f\n", width, precision, weight);scanf() 中:%*d 表示跳過該輸入項。例:scanf("%*d %*d %d", &n); 跳過前兩個整數,讀取第三個賦給 n。