| 類型 | 關鍵字 | 大小(典型) | 格式符 | 範圍示例 |
| 整數 | int | 4 字節 | %d / %i | -21億 ~ +21億 |
| 短整數 | short | 2 字節 | %hd | -32768 ~ 32767 |
| 長整數 | long | 4/8 字節 | %ld | 平台相關 |
| 無符號整數 | unsigned int | 4 字節 | %u | 0 ~ 42億 |
| 字符 | char | 1 字節 | %c | -128~127 或 0~255 |
| 單精度浮點 | float | 4 字節 | %f | ~7 位有效數字 |
| 雙精度浮點 | double | 8 字節 | %lf | ~15 位有效數字 |
變量聲明與初始化
int decks = 0; // 聲明並初始化
int count; // 聲明未初始化(值不確定)
count = 10; // 賦值
int a = 1, b = 2, c = 3; // 同類型鏈式聲明
規範:變量名只能含字母、數字、下劃線,不能數字開頭,區分大小寫,避開關鍵字。
二、輸入輸出函數詳解
1. printf 格式化輸出
printf("格式字符串", 參數列表);
常用格式符:
%d / %i:有符號十進制整數
%u:無符號十進制整數
%f:浮點數(默認 6 位小數)
%.2f:保留 2 位小數
%c:單字符
%s:字符串
%%:輸出百分號本身
\n:換行,\t:製表符
2. scanf 格式化輸入
scanf("格式字符串", &變量1, &變量2, ...);
關鍵點:
- **必須取地址**:
&variable 傳遞變量地址,否則無法修改變量值
- 返回值:成功匹配賦值的項目數,失敗返回
EOF
- 空白字符(空格、換行、製表)默認作為分隔符跳過
三、完整交互程序:撲克牌張數計算器
需求
用戶輸入副數,程序計算並輸出總張數(1副=52張),包含輸入驗證。
代碼:cards.c
#include
int main() {
int decks;
// 1. 提示輸入
puts("請輸入撲克牌副數:");
// 2. 讀取輸入
if (scanf("%d", &decks) != 1) {
printf("錯誤:請輸入有效整數\n");
return 1;
}
// 3. 業務邏輯驗證
if (decks < 1) {
puts("無效的副數:至少需要 1 副");
return 1;
}
// 4. 計算並輸出結果
int total = decks * 52;
printf("總共有 %d 張牌\n", total);
return 0;
}
編譯運行演示
$ gcc cards.c -o cards
$ ./cards
請輸入撲克牌副數:
3
總共有 156 張牌
$ ./cards
請輸入撲克牌副數:
0
無效的副數:至少需要 1 副
$ ./cards
請輸入撲克牌副數:
abc
錯誤:請輸入有效整數
四、程序結構分析
int main() {
// 1. 變量聲明
int decks;
// 2. 輸出提示
puts("提示信息");
// 3. 輸入讀取 + 格式驗證
if (scanf("%d", &decks) != 1) { ... }
// 4. 業務邏輯驗證
if (decks < 1) { ... }
// 5. 核心計算
int total = decks * 52;
// 6. 格式化輸出結果
printf("結果: %d\n", total);
// 7. 返回狀態碼
return 0; // 成功
// return 1; // 失敗
}
五、進階:輸入緩衝區清理
scanf 留下換行符在緩衝區,後續 getchar/fgets 會誤讀。清理方法:
// 方法1:讀取並丟棄剩餘字符
int c;
while ((c = getchar()) != '\n' && c != EOF);
// 方法2:使用 scanf 格式字符串跳過空白(推薦)
scanf("%d", &decks); // %d 自動跳過前導空白
// 但若輸入 "3 abc","abc" 仍殘留
// 完整清理:
scanf("%*[^\n]"); scanf("%*c"); // 丟棄到換行符含換行符
六、調試技巧:打印中間值
// 臨時調試打印
printf("[DEBUG] decks = %d\n", decks);
printf("[DEBUG] total = %d\n", total);
// 正式版本刪除或註釋
七、本節作業
- 修改程序:輸入長寬高,計算長方體體積與表面積
- 編寫程序:輸入華氏溫度,轉換輸出攝氏溫度(公式:C = (F-32)*5/9)
- 實驗:輸入
3.14 給 %d,觀察 scanf 行為與返回值
- 閱讀
man 3 scanf 了解 %[]、%n 等高級格式符
總結
掌握「聲明→提示→輸入驗證→邏輯驗證→計算→格式化輸出→返回碼」這一標準程序骨架,是編寫健壯 C 程序的基礎。下一節將進入指針世界,解鎖 C 語言最核心也最迷人的特性。
- 上一篇文章: C語言入門教程(一):環境搭建與第一個程序運行全過程
- 下一篇文章: C語言入門教程(三):指針核心概念與實戰——從地址到間接訪問
Copyright ©
程式碼之家 All Rights Reserved