printf 與 scanf 是 C 語言最基礎、使用頻率最高的標準 I/O 函數,屬於格式化輸入輸出函數。掌握其格式控制字串與參數對應規則,是避免輸出亂碼、輸入錯誤的關鍵。
int printf(const char *format, ...);
int scanf(const char *format, ...);
兩者參數均由兩部分組成:
%d、%lf)與普通字符(原樣輸出/匹配)。| 類型 | printf | scanf | 說明 |
|---|---|---|---|
| int | %d, %i | %d, %i | 有號十進制整數 |
| unsigned int | %u | %u | 無號十進制整數 |
| float | %f, %e, %g | %f, %e, %g | 單精度浮點數 |
| double | %lf, %le, %lg | %lf, %le, %lg | 雙精度浮點數(注意 scanf 必須 %lf) |
| char | %c | %c | 單字符 |
| char* | %s | %s | 字串(以空白分隔) |
| 指針 | %p | %p | 地址值(十六進制) |
int x; double y;
scanf("%d%lf", &x, &y); // 必須加 & 取地址
printf("%d %.2f", x, y); // 直接傳值
常見錯誤:scanf("%d", x) 忘記 &,導致寫入隨機記憶體,程式崩潰或靜默錯誤。
#include <stdio.h>
int max(int a, int b);
int main() {
int x, y, z;
printf("input two numbers:\n");
scanf("%d%d", &x, &y); // 讀入兩整數
z = max(x, y); // 調用自定義函數
printf("maximum=%d\n", z);
return 0;
}
int max(int a, int b) {
return (a > b) ? a : b;
}
printf 輸出提示字串到標準輸出(螢幕)。scanf 從標準輸入(鍵盤)讀取,按格式解析,存入 x、y。max(),傳值參數 a=x, b=y,返回較大值。printf 輸出結果。%10d(寬度 10 右對齊),%.2f(保留 2 位小數)。%[^\n] 讀整行(含空格),%*d 跳過讀取不賦值。scanf 返回成功匹配項數,務必檢查以確保輸入有效。scanf("%c") 會讀取殘留換行符,前置空格 " %c" 可跳過空白字符。熟練掌握 printf/scanf 格式控制,是 C 語言處理數據交互的基本功,亦是後續文件操作、網絡通訊序列化的基石。