在 C 語言程式設計中,輸入與輸出(I/O)是程式與外部世界溝通的橋樑。無論是從鍵盤讀取使用者資料,還是將運算結果顯示於螢幕、寫入檔案,都離不開標準函式庫提供的 I/O 函式。本文將系統性地介紹 C 語言的核心 I/O 機制,涵蓋標準串流、格式化函式、字元與字串處理,並附上完整範例碼供參考。
C 語言將所有裝置視為檔案處理,程式啟動時會自動開啟三個標準串流:
| 標準串流 | 檔案指標 | 對應裝置 |
|---|---|---|
| 標準輸入 | stdin | 鍵盤 |
| 標準輸出 | stdout | 螢幕 |
| 標準錯誤 | stderr | 螢幕(錯誤訊息專用) |
這三個指標定義於 <stdio.h> 中,是後續所有 I/O 操作的基礎。
最常用的格式化輸入輸出函式為 printf() 與 scanf(),兩者皆透過格式字串控制資料呈現與解析方式。
#include <stdio.h>
int main() {
printf("菜鳥教程"); // 直接輸出字串
return 0;
}
輸出:
菜鳥教程
#include <stdio.h>
int main() {
int testInteger = 5;
printf("Number = %d", testInteger);
return 0;
}
輸出:
Number = 5
#include <stdio.h>
int main() {
float f;
printf("Enter a number: ");
scanf("%f", &f); // 注意取址運算子 &
printf("Value = %f", f);
return 0;
}
針對單一字元讀寫,提供 int getchar(void) 與 int putchar(int c)。兩者一次處理一字元,適合迴圈處理字串。
#include <stdio.h>
int main() {
int c;
printf("Enter a value: ");
c = getchar();
printf("\nYou entered: ");
putchar(c);
printf("\n");
return 0;
}
執行時輸入 runoob 並按 Enter,程式僅讀取首字元 r。
gets() 可讀取整行文字(含空白),直到換行或 EOF;puts() 則輸出字串並自動補上換行。注意:gets() 因緩衝區溢位風險,現代 C 標準已棄用,建議改用 fgets()。
#include <stdio.h>
int main() {
char str[100];
printf("Enter a value: ");
gets(str); // 讀取整行
printf("\nYou entered: ");
puts(str); // 輸出並換行
return 0;
}
輸入 runoob 可完整讀取並輸出。
scanf() 與 printf() 支援多種格式指標:%d 整數、%f 浮點數、%c 字元、%s 字串等。掃描時以空白字元分隔欄位,字串讀取遇空白即停止。
#include <stdio.h>
int main() {
char str[100];
int i;
printf("Enter a value: ");
scanf("%s %d", str, &i);
printf("\nYou entered: %s %d\n", str, i);
return 0;
}
輸入 runoob 123 可正確解析;若輸入 this is test,%s 僅讀取 this。
<stdio.h>scanf() 讀取變數需加取址運算子 &(字串陣列除外)fgets() 避免緩衝區溢位stderr 通常不經緩衝,適合即時輸出錯誤訊息掌握這些核心 I/O 函式,即可靈活處理 C 程式的資料交互需求。