C 語言編程 — 輸入/輸出與文件操作
目錄

文章目錄
目錄
前文列表
輸入/輸出
scanf() 和 printf()
getchar() 和 putchar()
文件操作
打開文件
關閉文件
寫入文件
讀取文件
二進制 I/O 函數
前文列表
《程序編譯流程與 GCC 編譯器》
《C 語言編程 — 基本語法》
《C 語言編程 — 基本數據類型》
《C 語言編程 — 變量與常量》
《C 語言編程 — 運算符》
《C 語言編程 — 邏輯控制語句》
《C 語言編程 — 函數》
《C 語言編程 — 高級數據類型 — 指針》
《C 語言編程 — 高級數據類型 — 數組》
《C 語言編程 — 高級數據類型 — 字符串》
《C 語言編程 — 高級數據類型 — 枚舉》
《C 語言編程 — 高級數據類型 — 結構體與位域》
《C 語言編程 — 高級數據類型 — 共用體》
《C 語言編程 — 高級數據類型 — void 類型》
《C 語言編程 — 數據類型的別名》
《C 語言編程 — 數據類型轉換》
《C 語言編程 — 宏定義與預處理器指令》
《C 語言編程 — 異常處理》
《C 語言編程 — 頭文件》
輸入/輸出
輸入,意味著要向程序輸入數據,可以是以文件的形式或從命令行中進行。
輸出,意味著要在屏幕上、打印機上或任意文件中輸出數據。
C 語言把所有的設備都當作文件。所以處理設備(e.g. 顯示器)的輸入/輸出的方式與文件操作的方式相同。以下三個文件稱之為標準輸入/輸出文件,會在程序執行時自動打開,以便訪問鍵盤和屏幕。C 語言中常用的標準輸入/輸出函數在 stdio.h 頭文件中聲明。
注:文件指針是訪問文件的入口。
scanf() 和 printf()
int scanf(const char *format, ...) 函數從標準輸入流 stdin 讀取輸入,并根據提供的 format 來瀏覽輸入。
int printf(const char *format, ...) 函數把輸出寫入到標準輸出流 stdout ,并根據提供的格式產生輸出。
format 可以是一個簡單的常量字符串,可以分別指定 %s、%d、%c、%f 等來輸出或讀取字符串、整數、字符或浮點數類型數據。還有許多其他可用的格式選項,可以根據需要使用。
#include
1
2
3
4
5
6
7
8
9
getchar() 和 putchar()
int getchar(void) 函數從屏幕讀取下一個可用的字符,并把它返回為一個整數。這個函數在同一個時間內只會讀取一個單一的字符。可以在循環內使用這個方法,以便從屏幕上讀取多個字符。
int putchar(int c) 函數把字符輸出到屏幕上,并返回相同的字符。這個函數在同一個時間內只會輸出一個字符。可以在循環內使用這個方法,以便在屏幕上輸出多個字符。
#include
1
2
3
4
5
6
7
8
9
10
11
12
13
文件操作
常見的文件操作有創建、打開、關閉文本文件或二進制文件。一個文件,無論它是文本文件還是二進制文件,都是代表了一系列的字節。C 語言不僅提供了訪問頂層的函數,也提供了操作系統的系統調用來處理存儲設備上的文件。
打開文件
使用 fopen() 函數來創建一個新的文件或者打開一個已有的文件,這個函數調用會初始化并返回一個 FILE 類型變量,其包含了所有用來控制文件數據流的必要的信息。
FILE *fopen(const char * filename, const char * mode);
1
mode 類型
如果處理的是二進制文件,則需使用下面的訪問模式來替代:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
1
關閉文件
使用 fclose() 函數:
int fclose(FILE *fp);
1
這個函數實際上會清空緩沖區中的數據,關閉文件,并釋放用于該文件的所有內存。如果成功關閉文件,函數會返回整數零,如果關閉文件時發生錯誤,函數返回 EOF。EOF 是一個定義在頭文件 stdio.h 中的常量。
寫入文件
函數 fputc() 把實參整型 c 的字符值寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回寫入的字符,如果發生錯誤,則會返回 EOF。
int fputc(int c, FILE *fp);
1
函數 fputs() 把把一個以 null 結尾的字符串 s 寫入到 fp 所指向的輸出流中。如果寫入成功,它會返回一個非負值,如果發生錯誤,則會返回 EOF。
int fputs(const char *s, FILE *fp);
1
還可以使用 fprintf() 函數來寫把一個字符串寫入到文件中。
int fprintf(FILE *fp,const char *format, ...)
1
示例:
#include
1
2
3
4
5
6
7
8
9
10
11
讀取文件
函數 fgetc() 從 fp 所指向的輸入文件中讀取一個字符。返回值是讀取的字符,如果發生錯誤則返回 EOF。
int fgetc(FILE *fp);
1
函數 fgets() 從 fp 所指向的輸入流中讀取 n-1 個字符。它會把讀取的字符串復制到緩沖區 buf,并在最后追加一個 null 字符來終止字符串。如果這個函數在讀取最后一個字符之前就遇到一個換行符 '\n' 或文件的末尾 EOF,則只會返回讀取到的字符,包括換行符。
char *fgets(char *buf, int n, FILE *fp);
1
可以使用 fscanf() 函數來從文件中讀取字符串,但是在遇到第一個空格和換行符時,它會停止讀取。
int fscanf(FILE *fp, const char *format, ...)
1
示例:
#include
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
運行:
$ ./main 1: This 2: is testing for fprintf... 3: This is testing for fputs...
1
2
3
4
5
首先,fscanf() 函數只讀取了 This,因為它在后邊遇到了一個空格。其次,調用 fgets() 讀取剩余的部分,直到行尾。最后,調用 fgets() 完整地讀取第二行。
二進制 I/O 函數
size_t fread(void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file); size_t fwrite(const void *ptr, size_t size_of_elements, size_t number_of_elements, FILE *a_file);
1
2
3
4
5
6
7
8
9
C 語言 數據結構
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。