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

      網友投稿 853 2025-04-01

      目錄


      文章目錄

      目錄

      前文列表

      輸入/輸出

      scanf() 和 printf()

      getchar() 和 putchar()

      文件操作

      打開文件

      關閉文件

      寫入文件

      讀取文件

      二進制 I/O 函數

      前文列表

      《程序編譯流程與 GCC 編譯器》

      《C 語言編程 — 基本語法》

      《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 int main() { float f; printf("Enter a number: "); scanf("%f",&f); printf("Value = %f", f); return 0; }

      1

      2

      3

      4

      5

      6

      7

      8

      9

      getchar() 和 putchar()

      int getchar(void) 函數從屏幕讀取下一個可用的字符,并把它返回為一個整數。這個函數在同一個時間內只會讀取一個單一的字符。可以在循環內使用這個方法,以便從屏幕上讀取多個字符。

      int putchar(int c) 函數把字符輸出到屏幕上,并返回相同的字符。這個函數在同一個時間內只會輸出一個字符。可以在循環內使用這個方法,以便在屏幕上輸出多個字符。

      #include int main() { int c; printf("Enter a value :"); c = getchar( ); printf("\nYou entered: "); putchar(c); printf("\n"); return 0; }

      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 int main() { FILE *fp = NULL; fp = fopen("/tmp/test.txt", "w+"); fprintf(fp, "This is testing for fprintf...\n"); fputs("This is testing for fputs...\n", fp); fclose(fp); return 0; }

      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 int main() { FILE *fp = NULL; char buff[255]; fp = fopen("/tmp/test.txt", "r"); fscanf(fp, "%s", buff); printf("1: %s\n", buff); fgets(buff, 255, fp); printf("2: %s\n", buff); /* 使用顯示的強制類型轉換,實際上可忽略 */ fgets(buff, 255, (FILE*)fp); printf("3: %s\n", buff ); fclose(fp); return 0; }

      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小時內刪除侵權內容。

      上一篇:怎么把幾個文檔合為一個(怎么將幾個文檔合成一個)
      下一篇:如何在表格里面同時加內容(怎么在表格內容里加內容)
      相關文章
      亚洲av一综合av一区| 亚洲女同成av人片在线观看| 亚洲精品自产拍在线观看动漫| 国产精品亚洲不卡一区二区三区| 亚洲av永久无码一区二区三区| 亚洲精华液一二三产区| 一本色道久久88亚洲精品综合| 亚洲国产精品综合一区在线| 亚洲伊人久久大香线蕉在观| 亚洲神级电影国语版| 亚洲国产午夜精品理论片| 亚洲国产成人va在线观看网址| 亚洲天堂一区二区三区四区| 亚洲欧洲日产国码av系列天堂| 亚洲精品二区国产综合野狼| 久久亚洲精品成人综合| 久久久久久亚洲Av无码精品专口| 亚洲天堂久久精品| 亚洲日韩中文字幕天堂不卡 | 亚洲国产精品热久久| 亚洲国产成人片在线观看无码| 久久亚洲国产中v天仙www| 久久亚洲AV午夜福利精品一区| 亚洲av成人无码久久精品| 亚洲成人在线网站| 亚洲国产日韩在线人成下载| 亚洲一区二区三区在线| 亚洲综合av一区二区三区| 亚洲av无码专区首页| 亚洲不卡无码av中文字幕| 国产偷国产偷亚洲高清日韩| 国产亚洲一区二区在线观看| 色婷婷六月亚洲婷婷丁香| 久久久久亚洲av无码专区喷水 | 青青青亚洲精品国产| 亚洲国产精品综合久久网络| 国产亚洲AV夜间福利香蕉149| 亚洲国产精品成人精品无码区在线| 亚洲伦另类中文字幕| 亚洲免费在线视频观看| 亚洲欧美自偷自拍另类视|