C/C++ fgets 用法與範例

本篇 ShengYu 介紹 C/C++ fgets 的用法與範例,C/C++ 可以使用 fgets 從檔案裡讀取一行文字出來,fgets 函式會一直讀取到換行字元或檔尾為止,fgets 除了從檔案裡讀取一行文字以外還能從標準輸入讀取一行文字,詳見本篇範例。

C/C++ 要使用 fread 的話需要引入的標頭檔 <stdio.h>,如果要使用 C++ 的標頭檔則是引入 <cstdio>
fgets 函式原型為

1
char * fgets(char * str, int num, FILE * stream);

str:指向一塊字元陣列的指標,讀取的字串將會複製到這裡
num:讀取字元複製到 str 的最大數量(包含 '\0' 結束字元)
stream:指向 FILE 物件的指標

以下 C/C++ fgets 的用法介紹將分為這幾部份,

  • C/C++ fgets 從檔案一次讀取一行文字
  • C/C++ fgets 從檔案讀取多行文字
  • C/C++ fgets 從標準輸入讀取一行文字

那我們開始吧!

C/C++ fgets 從檔案一次讀取一行文字

這邊介紹 C/C++ fgets 一次讀取一行,以下範例示範 C/C++ 用 fgets 來讀取文字檔的內容,假設我們要讀取一個 input.txt,input.txt 內容長這樣如下,

input.txt
1
2
hello world
123456

在使用 fgets 前要先 fopen 開檔成功才能進行檔案內容讀取,fopen 開檔回傳 NULL 表示開檔失敗,如果不是 NULL 表示開檔成功。

宣告一塊字元陣列 buffer 大小為 32,所以 fgets 最多讀取 32 個 bytes 不超過 buffer 的大小,然後將讀到的文字用 printf 印出來,最後 fclose 關檔,

cpp-fgets.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// g++ cpp-fgets.cpp -o a.out
#include <stdio.h>

int main() {
FILE *fp;
char buffer[32];

fp = fopen("input.txt", "r");
if (fp == NULL) {
printf("failed to open the file.\n");
return 1; // EXIT_FAILURE
}

fgets(buffer, 32, fp);
printf("%s\n", buffer);
fclose(fp);
return 0;
}

結果輸出如下,

1
hello world

C/C++ fgets 從檔案讀取多行文字

這邊介紹 C/C++ fgets 讀取多行,input.txt 跟上述例子相同,這次 fgets 搭配 while 迴圈來不斷地讀取多行文字,buffer 大小為 32,所以這邊 fgets 每次最多讀取 32 個 bytes,每次將讀到的文字用 printf 印出來,如果 fgets 讀完會回傳 NULL,接著就結束 while 迴圈,然後 fclose 關檔,

cpp-fgets2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// g++ cpp-fgets2.cpp -o a.out
#include <stdio.h>

int main() {
FILE *fp;
char buffer[32];

fp = fopen("input.txt", "r");
if (fp == NULL) {
printf("failed to open the file.\n");
return 1; // EXIT_FAILURE
}

while (fgets(buffer, 32, fp) != NULL) {
printf("%s", buffer);
}
printf("close file\n");
fclose(fp);
return 0;
}

結果輸出如下,

1
2
3
hello world
123456
close file

C/C++ fgets 從標準輸入讀取一行文字

C/C++ fgets 除了從檔案裡讀取一行文字以外也可以用來從標準輸入讀取一行文字,範例如下,標準輸入為 stdin 就不需要像檔案一樣開檔了,

cpp-fgets3.cpp
1
2
3
4
5
6
7
8
9
10
11
// g++ cpp-fgets3.cpp -o a.out
#include <stdio.h>

int main() {
char buffer[32];
printf("input: ");
fgets(buffer, 32, stdin);
printf("%s\n", buffer);

return 0;
}

啟動程式後輸入 123456 的輸出如下,

1
2
input: 123456
123456

以上就是 C/C++ fgets 的用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它相關文章推薦
如果你想學習 C++ 相關技術,可以參考看看下面的文章,
C/C++ 新手入門教學懶人包
C/C++ fopen 用法與範例
C/C++ fread 用法與範例
C/C++ fwrite 用法與範例
C/C++ fputs 用法與範例
C/C++ fclose 用法與範例