Fgets Trong C

Hướng dẫn cách sử dụng hàm fgets trong C. Bạn sẽ học được cách sử dụng hàm fgets() để đọc từng dòng trong file C cũng như ứng dụng fgets() để nhập chuỗi có khoảng trắng trong CC sau bài học này.

fgets trong C

Hàm fgets() trong C là một hàm có sẵn trong header file string.h, giúp chúng ta đọc từng dòng trong file C. Hàm fgets() sẽ đọc từng dòng trong file C, rồi chuyển nội dung từng dòng này vào một chuỗi ký tự, với số lượng chuyển vào được quyết định trong đối số của hàm.

Cứ như vậy, hàm fgets sẽ đọc đến ký tự cuối cùng trong từng dòng của file rồi mới chuyển sang dòng tiếp theo, cho tới khi hết file cần đọc.

Hàm fgets() sẽ trả về con trỏ của chuỗi ký tự chứa kết quả đọc file, và trong trường hợp đọc file thất bại, giá trị [NULL] sẽ được trả về.

Chúng ta chỉ định file cần đọc thông qua con trỏ tới file đó và đọc file đó bằng hàm fgets() với cú pháp sau đây:

char *fgets(char *s, int n, FILE *fp);

Trong đó:

  • *s là con trỏ dùng để lưu nội dung đọc từ file.
  • n là số ký tự lớn nhất có thể đọc từ từng dòng trong file, bao gồm cả ký tự kết thúc chuỗi \0.
  • *fp là con trỏ tới file cần đọc.

Lưu ý là n bao gồm cả ký tự kết thúc chuỗi \0, do đó số ký tự thực có thể đọc được từ từng dòng trong file sẽ là n-1 mà thôi.

Lại nữa, không những chúng ta có thể đọc nội dung từ file bằng hàm fgets(), mà còn có thể sử dụng fgets() để nhận chuỗi ký tự được nhập từ bàn phím vào chương trình C. Khi đó chúng ta cần chỉ định con trỏ tới file cần đọc là [stdin]. Chúng ta sẽ cùng làm rõ ở phần tiếp theo.

Và chúng ta cần phải viết thêm dòng #include <string.h> để load header file string.h để có thể sử dụng được hàm fgets() trong chuơng trình.

Ví dụ cụ thể, chúng ta có file test.txt với nội dung file như sau:

test.txt

Chúng ta sẽ đọc file này bằng hàm fget() như sau:

Copy
#include <stdio.h>#include <string.h>int main(void){ FILE *fp; char buf[50]; fp = fopen("test.txt","r"); fgets(buf,30,fp); puts(buf); fclose(fp); return 0;}

Kết quả cđọc file này bằng hàm fgets:

Copy
test

Một ví dụ khác, chúng ta có file test.txt với nội dung file như sau:

Hello C! Hello World! Hello Vietnam!

Chúng ta cũng đọc file này bằng hàm fget(), tuy nhiên chúng ta sẽ thêm một số xử lý lỗi trong trường hợp không đọc được file trên như sau:

Copy
#include <stdio.h>#include <string.h>#define N 256 // Tạo marco chỉ định số lượng ký tự lớn nhất có thể đọcint main(void) { FILE *fp; // Tạo con trỏ file char fname[] = "test.txt"; char str[N]; fp = fopen(fname, "r"); //Mở file cần đọc. Trả về NULL nếu thất bại if(fp == NULL) { printf("%s file not open!\n", fname); return -1; } while(fgets(str, N, fp) != NULL) { printf("%s", str); } fclose(fp); // Đóng file sau khi đọc xong return 0;}

Kết quả cđọc file này bằng hàm fgets:

Copy
Hello C!Hello World!Hello Vietnam!

Sử dụng fgets để nhập chuỗi có khoảng trắng trong C

Hàm fgets() vốn được sử dụng để đọc và lấy dữ liệu từ file trong C, tuy nhiên chúng ta cũng có thể nhập chuỗi có khoảng trắng trong C bằng hàm này với cú pháp sau đây:

fgets(str, sizeof(str)+1, stdin);

Trong đó:

  • str là biến để chứa chuỗi cần nhập từ bàn phím
  • sizeof(str)+1 để chỉ định số ký tự lớn nhất có thể nhập bởi hàm fgets(). Ở đây hàm sizeof(str) sẽ trả về kích cỡ của chuỗi str, bao gồm cả ký tự kết thúc chuỗi \0, nên chúng ta cần cộng thêm 1 đơn vị vào.
  • stdin được sử dụng như là con trỏ file trong hàm fgets(). stdin là viết tắt của file header “stdio.h”, giúp chúng ta có thể nhận đầu vào tiêu chuẩn từ bàn phím.

Và sau đây là ví dụ nhập chuỗi có dấu cách trong C:

Copy
#include <stdio.h>#include <string.h>int main(void){ printf("Nhap chuoi co ky tu trang: "); char str[10]; fgets(str, sizeof(str)+1, stdin); printf("Chuoi vua nhap: "); puts(str); return 0;}

Khi đó màn hình nhập dữ liệu sẽ như sau:

Copy
Nhap chuoi co ky tu trang: Viet NamChuoi vua nhap: Viet Nam

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn cách sử dụng fgets trong c rồi. Để nắm rõ nội dung bài học hơn, bạn hãy thực hành viết lại các ví dụ của ngày hôm nay nhé.

Và hãy cùng tìm hiểu những kiến thức sâu hơn về C trong các bài học tiếp theo.

URL Link

https://laptrinhcanban.com/c/lap-trinh-c-co-ban/ham-trong-c/fgets-trong-c/

Từ khóa » Fgetc Trong C La Gi