Hướng Dẫn Cách Tìm Nạp Chuỗi Trong Hàm C Fgets Chính Xác - Box-edu

Trong quá trình tìm hiểu về ngôn ngữ C thì các bạn sẽ được làm quen rất nhiều cú pháp chuỗi khác nhau. Trong đó có hàm C fgets giúp bạn có thể truy cập vào các chuỗi được định dạng và lưu trữ dưới dạng tệp. C là ngôn ngữ mẹ phổ biến, do đó các chương trình phức tạp đã được xây dựng trên kiến trúc C dựa vào các cú pháp rõ ràng và sử dụng đa dạng các cấu trúc để thao tác với nhiều loại dữ liệu khác nhau. Cùng Box.edu tìm hiểu kỹ hơn ở bài viết dưới đây.

👉 Xem thêm: Cách đơn giản để chuyển đổi sáng giá trị số – C String to Int

👉 Xem thêm: Tổng quan kiến thức về lập trình hướng đối tượng trong C

👉 Xem thêm: Những kiến thức tổng quan về tệp C dành cho người lập trình

Mục lục bài viết

Cách đọc chuỗi với hàm C fgets từ một tệp

cach-doc-chuoi-voi-ham-c-fgets-tu-mot-tep.jpg

Cách đọc chuỗi với hàm C fgets từ một tệp

Chắc hẳn nhiều bạn đã từng được nghe về chức năng I/O. Truyền thông tin từ hệ thống máy tính đưa ra thiết bị bên ngoài. Thuật ngữ này thường đề cập đến tương tác của người dùng. Với dữ liệu thông qua thư viện các mô-đun hoạt động trên các loại tệp khác nhau. 

Fgets () là một trong số đó. Nó lấy một cái gì đó từ một tệp và sau đó sao chép vào các thiết bị đầu cuối, giống như một công cụ quét Web hoặc bất kỳ công cụ trích xuất dữ liệu nào khác. Fgets () đọc hoặc tìm nạp một chuỗi từ một tệp đã được lựa chọn. Nó cũng có thể đọc một chuỗi được lấy từ đầu vào bàn phím của bạn. 

Trước khi bạn tìm hiểu sâu hơn về hàm fgets, bạn phải nhớ cú pháp chính xác cho các chuỗi trong C đó là: Chúng có dấu ngoặc kép và được coi như một mảng ký tự. Mảng AC bắt đầu từ chỉ số 0 và đánh dấu kết thúc bằng \ n: 

//Writing a string #include “stdio.h”; char string_example[int] = “string”; demo_string = “Hello world!”; //Declaring an array type arrayName [ arraySize ]; double balance[int] = { list of values };

Để định nghĩa fgets () trong C, bạn có thể sử dụng cú pháp sau đây:

char *fgets(char *str, int size, file* file);
  • Biến char str sẽ lưu trữ một chuỗi hoặc một mảng có độ dài cố định sau khi nó được đọc
  • Tham số kích thước chỉ định số lượng ký tự để đọc và kết thúc bằng ký tự null
  • Còn tham số tệp trỏ đến một đối tượng Tệp và bắt đầu ở vị trí mà bạn muốn đọc

Ngoài ra nếu bạn thích đọc từ bàn phím có thể sử dụng định dạng chuẩn như sau:

fgets(pString, size, stdin);

Cách đọc chuỗi từ bàn phím trong C

Việc đọc chuỗi từ bàn phím trong C là rất quan trọng do đó bạn cần phân tích các chuỗi mà người dùng nhập vào một trường biểu mẫu cụ thể. Đây cũng là nơi mà trang đăng nhập sẽ lưu tên người dùng và mật khẩu. Mời các bạn tham khảo qua chương trình sau đây:

Int main() { //declare a pointer char word[str limit]; //read input of unknown length fgets(word, sizeof(word), stdin); }

“Giới hạn str” là tùy ý, nó chỉ ước tính chuỗi lớn nhất có thể và ngăn chặn việc tràn bộ đệm trong trường hợp số lượng bị vượt quá. Hàm fgets có nhiệm vụ đọc các chuỗi được nhập bởi người dùng có độ dài khác nhau. Đồng thời nó ghi lại các từ được nhập vào bàn phím bằng thuật ngữ stidin. 

Khi nào nên sử dụng scanf () để thay cho fgets ()?

Mặc dù cả fgets () và scanf () đều có thể đọc đầu vào chuỗi, tùy vào trường hợp khác nhau sẽ lựa chọn một cú pháp phù hợp. Để đọc từ các tệp đang mở, bạn bắt buộc phải khai báo fgets () trong khi việc đọc từ bàn phím sẽ mở ra một trong hai tùy chọn khác nhau.

Scanf () sẽ ngay lập tức thoát khỏi một chuỗi khi nó chạm vào một khoảng trắng nên ứng dụng của nó bị giới hạn ở các chuỗi liên tục và đơn lẻ. Ngược lại, fgets () có thể đọc toàn bộ dòng từ một luồng tệp, sau đó sao chép các byte qua một chuỗi kết thúc null vào bộ đệm str. Cụ thể chương trình cuối cùng đọc từ một mảng chuỗi được thể hiện như sau:

#include <stdio.h> int main() { FILE *fp; char str[60]; /* opening file for reading */ fp = fopen("file.txt" , "r"); if(fp == NULL) { perror("Error opening file"); return(-1); } if( fgets (str, 60, fp)!=NULL ) { /* writing content to stdout */ puts(str); } fclose(fp); return(0); }

Các chương trình sẽ mở một tệp ở chế độ đọc bằng fp = fopen (“file.txt”, “r”). Sau đó, nó sẽ trả về một con trỏ đến tệp đã nói bằng cách lưu trữ nó trong biến fp. Đồng thời nó cũng được bao bọc bên trong một int main () để tạo ra một số nguyên (0 hoặc 1) sau khi dòng lệnh cuối cùng được thực thi. 

Điều kiện if có fgets (str, 60, fp)! = NULL để đảm bảo rằng nó chỉ đọc tối đa 60 ký tự trước khi lưu trữ nó vào một mảng chuỗi. Nếu không, giá trị NULL được trả về để chỉ ra EOF. Lệnh put (str) sẽ kiểm tra xem fgets () có quản lý để đọc chuỗi hay không. Cuối cùng là in kết quả đầu ra của mảng str ra màn hình trước khi nó đóng tệp bằng fclose (fp).

Tổng hợp những câu hỏi thường gặp về hàm C fgets

tong-hop-nhung-cau-hoi-thuong-gap-ve-ham-c-fgets.jpg

Tổng hợp những câu hỏi thường gặp về hàm C fgets

Fgets làm được gì trong C?

Hàm C fgets là một hàm thư viện dùng để đọc các ký tự từ luồng đích và tiến hành lưu trữ thông tin trong một chuỗi có trỏ str. Sau đó fgets C sẽ tiếp tục hoạt động cho đến khi nó xuất hiện trên một ký tự dòng mới hoặc cho đến cuối tệp. 

Cú pháp của hàm đó là:

char *fgets(char *str, int n, File *stream)
  • Fgets str sẽ trỏ đến mảng ký tự, đồng thời mảng này sẽ được đọc cho đến khi nó chạy qua n-1 ký tự
  • Chữ n gợi lại số lượng ký tự lớn nhất mà hàm có thể đọc. Độ dài của mảng này thường được đặt là giá trị n
  • Luồng được hiểu là một con trỏ đối tượng Tệp để định vị luồng sẽ được đọc bởi các tiện ích khác nhau

Điều này xảy ra cũng lý giải cho việc con trỏ null được trả về là để báo hiệu một cuộc gặp gỡ cuối tệp trong đó không có ký tự nào được đọc. Nếu xảy ra lỗi trong quá trình thực hiện thì bạn cũng có thể mong đợi một con trỏ null trả về kết quả.

Điểm khác biệt giữa hàm C fgets và get in C là gì?

Thực tế fgets và get in C đều có những điểm khác biệt cụ thể fgets (). Sẽ đọc một dòng duy nhất từ ​​luồng đầu vào và sẽ không quan tâm đến bất kỳ ràng buộc nào. Ví dụ như độ dài tối đa hoặc tham chiếu thiết bị. 

Đặc biệt nó cũng dễ dàng kiểm tra ranh giới của mảng được chỉ định. Và dừng lại trên một dòng mới. Thông thường số lượng ký tự sẽ không được vượt quá kích thước fgets. Nếu không thì nó cũng sẽ không in ra. Đồng thời fgets cũng phục vụ như một phiên bản an toàn hơn của get () bằng cách giới hạn kích thước đầu vào để tránh khả năng xảy ra việc tràn bộ đệm. 

Hàm get khác ở chỗ là nó đọc các ký tự từ đầu vào chuẩn và lưu trữ chúng vào bộ nhớ str. Và kết thúc khi nó đạt đến EOD. Cú pháp của get () là: char * get (char * str). Quét một chuỗi dữ liệu nhập của người dùng cho đến khi nó không thể tìm thấy một dòng mới. 

Tuy nhiên get () dễ gây ra lỗi tràn. Điều này là do ghi dữ liệu vượt quá giới hạn bộ nhớ được phân bổ. Khi đó get không có cách nào để kiểm tra giới hạn mảng, vì vậy nó phải ghi đè giá trị của biến khác. 

Có thể sử dụng hàm nào trong C để thay thế?

Một trong những sự thay thể cho fgets đó là hàm getline (). Nó được viết dưới dạng: str.getline (đệm, kích thước, stdin). Bộ đệm này có tác dụng theo dõi vị trí đầu tiên của một ký tự. Kích thước là một địa chỉ biến giữ bộ đệm đầu vào và stdin xử lý tệp. 

Hàm này hoạt động tương tự như fgets bằng cách gọi str.erase (). Và trích xuất các ký tự từ đầu vào để đặt bên trong str. Và nó cũng dừng lại ở EOD và có giới hạn là str.max_size (). Để giới hạn chuỗi được đọc giữa các giới hạn. 

Cách thay thế thứ hai cho fgets đó là sử dụng char [] ở định dạng: char buffer [Max_Size]. Những gì nó làm đó là bỏ qua việc gọi fgets để xây dựng một chuỗi từ bộ đệm. Do đó, nó có thể tạo ra một không gian để lưu trữ chuỗi con. 

Tổng kết

Hàm C fgets như đã chia sẻ ở trên từ Box.edu. Thì nó là một trong những chuỗi phổ biến và có ích rất nhiều. Cho những bạn đang mong muốn tìm hiểu về lập trình ngôn ngữ C. Tuy nhiên, thì trong quá trình sử dụng. Bạn cũng có thể thay thế một vài những hàm chuỗi khác phù hợp hơn.

5/5 - (5 bình chọn)

Từ khóa » Fgetc Trong C La Gi