fgets trong C++ | Laptrinhcanban.com

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 C++ 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 cstring, 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 <cstring> để load header file cstring để 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:

#include <iostream>
#include <cstring>
using namespace std;

int main(){

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:

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:

#include <iostream>
#include <cstring>
using namespace std;

#define N 256 // Tạo marco chỉ định số lượng ký tự lớn nhất có thể đọc

int main() {
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) {
cout << fname<<" file not open!\n";
return -1;
}

while(fgets(str, N, fp) != NULL) {
cout << str;
}

fclose(fp); // Đóng file sau khi đọc xong

return 0;
}

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

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 “iostream”, 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++:

#include <iostream>
#include <cstring>
using namespace std;
int main(){

cout << "Nhap chuoi co ky tu trang: ";
char str[10];
fgets(str, sizeof(str)+1, stdin);


cout << "Chuoi vua nhap: ";
cout << str;
return 0;
}

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

Nhap chuoi co ky tu trang: Viet Nam
Chuoi 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.

HOME>> >>

Profile
きよしです!笑

Tác giả : Kiyoshi (Chis Thanh)

Kiyoshi là một cựu du học sinh tại Nhật Bản. Sau khi tốt nghiệp đại học Toyama năm 2017, Kiyoshi hiện đang làm BrSE tại Tokyo, Nhật Bản.