Hướng Dẫn đọc Luồng C Getline Trong Ngôn Ngữ Lập Trình - Box-edu
Có thể bạn quan tâm
Hàm getline hiện nay được sử dụng để đọc một luồng. Ngoài ra C getline còn được sử dụng với các tham số yêu cầu trong tệp tiêu đề stdio.h (có trong thư viện C chuẩn). Một trong những biến trong thư viện stdio.h sẽ được sử dụng. Chính là biến size_t, sẽ được thảo luận trong phần “bộ nhớ”. Vậy cụ thể C getline là gì và ứng dụng của nó trong lập trình thế nào. Thì mời các bạn và Box.edu tìm hiểu nhé!
Xem thêm: C scanf Function. Cách nhận dữ liệu người dùng qua ngôn ngữ C
Xem thêm: Hướng dẫn cách để tạo Vector trong C chính xác nhất
Xem thêm: Những kiến thức về trình biên dịch C Compiler for Mac
Mục lục bài viết
Tổng quan về C getline
Tổng quan về C getline
Thư viện stdio.h cũng bao gồm các macro sẽ được sử dụng với hàm getline. Ví dụ như macro NULL (được sử dụng cho các giá trị con trỏ null). Và EOFM (được sử dụng để chỉ ra thời điểm kết thúc tệp). Về cơ bản thì macro sẽ bao gồm các mã được lưu trữ. Thường được sử dụng hoặc tham chiếu mà không yêu cầu lệnh gọi hàm để chạy mã. Khi bạn sử dụng tiêu đề stdio.h. Bạn sẽ không phải tập trung vào các quy trình nền.
Đặc điểm của hàm getline () trong C
- Hàm getline là phương pháp ưa thích để đọc các dòng văn bản. Các chức năng khác như get, fgets và scanf. Không đáng tin cậy do vậy cần phải tránh.
- Hàm getline đọc toàn bộ dòng và bao gồm cả ký tự dòng mới tiếp theo. Đặc biệt nó còn có ba tham số. Đầu tiên là một con trỏ đến một khối được phân bổ bằng malloc hoặc calloc để phân bổ bộ nhớ cho chương trình khi chạy. Tham số này thuộc kiểu char **, nó sẽ chứa dòng được đọc bởi getline. Tham số thứ hai chính là một con trỏ đến một biến kiểu size_t. Và tham số này chỉ định kích thước tính bằng byte của khối bộ nhớ được trỏ tới bởi tham số đầu tiên. Cuối cùng tham số thứ ba thì chỉ đơn giản là luồng từ nơi để đọc dòng.
- Hàm getline sẽ tự động phóng to khối bộ nhớ khi cần thiết, thông qua hàm realloc. Do vậy không bao giờ thiếu dung lượng, một lý do tại sao getline lại an toàn.
- Nó cũng sẽ cho chúng ta biết kích thước mới của khối bằng giá trị được trả về trong tham số thứ hai.
- Nếu có lỗi xảy ra, chẳng hạn như kết thúc tệp, v.v. được tiếp cận mà không đọc bất kỳ byte nào, nó sẽ trả về -1.
- Mặc dù tham số thứ hai là kiểu con trỏ đến chuỗi. Bạn không thể coi nó như một chuỗi thông thường. Vì nó có thể chứa các ký tự null trước ký tự null cuối cùng đánh dấu cuối dòng. Giá trị trả về cho phép bạn phân biệt các ký tự rỗng. Mà getline được đọc như một phần của dòng. Bằng cách chỉ định kích thước của dòng.
Ví dụ về hàm C getline
Ví dụ về hàm C getline
Cú pháp cơ bản của hàm getline bao gồm một con trỏ (để lưu trữ các ký tự chuỗi), đặc tả cho kích thước của luồng được đọc (sử dụng biến size_t) và một con trỏ đến đối tượng FILE (cho vị trí của luồng đang đọc). Cụ thể:
getline (& your_string, & nbytes, stdin);Ví dụ này sẽ bao gồm một tham số con trỏ. Được gọi là & your_string, giả sử bạn đã xác định & your_string. Đồng thời bộ nhớ được cấp cho con trỏ trong chuỗi của bạn. Tham số thứ hai trong ví dụ này sẽ được gọi là & nbytes. Giả sử bạn đã xác định & nbytes và cũng chỉ ra số byte sẽ được sử dụng cho luồng. Tham số cuối cùng chính là stdin vì trong trường hợp này. Nguồn của tệp hoặc các ký tự đang được đọc sẽ là từ nguồn đầu vào của người sử dụng. Để chương trình này có thể sử dụng các tham số được đặt cho hàm getline. Bạn sẽ phải đảm bảo rằng các tham số này đã được xác định cụ thể.
Tại sao nên sử dụng hàm getline?
Bạn nên sử dụng getline thay vì các hàm khác. Như: get hay fgets, bởi vì khi đọc một chuỗi thì getline sẽ là phương pháp chính xác hơn. Lý giải cho điều này là vì nó không ngừng đọc một dòng khi phát hiện một ký tự null. Và nó sẽ tiếp tục đọc đến và bao gồm cả ký tự rỗng. Ngoài ra, khối lượng bộ nhớ sẽ được sử dụng cho chuỗi. Có thể được phân bổ lại để có đủ không gian cho một chuỗi.
Trước đây người ta đã đề cập rằng biến size_t. Được sử dụng cho hàm getline. Biến size_t được sử dụng để chỉ ra số byte bộ nhớ sẽ được sử dụng cho một luồng. Khi bạn xác định tham số đầu tiên cho getline là bạn đang xác định con trỏ tới một khối bộ nhớ sẽ được cấp phát. Một tính năng tuyệt vời của hàm getline đó là khối bộ nhớ có thể tự động được phân bổ lại để cho phép phân bổ đủ bộ nhớ cho luồng của bạn, đồng thời C còn có thể sử dụng các hàm malloc (cấp phát bộ nhớ) và realloc (phân bổ lại) để xử lý bộ nhớ. Trong ví dụ của bạn về việc sử dụng getline, hàm của bạn sẽ đọc một luồng thông qua đầu vào và vì không thể xác định trước đầu vào của người dùng nên dữ liệu đầu vào sẽ là động.
Ví dụ khác về hàm getline
Thông thường để có thể sử dụng hàm getline của bạn [getline (& your_string, & nbytes, stdin); ], thì bạn cần đảm bảo rằng các tham số đã được xác định cụ thể. Trong phương thức chính của bạn, hãy khai báo (hoặc xác định) các biến một cách chính xác.
#include <stdio.h> / * đây là tệp tiêu đề stdio mà bạn muốn đưa vào để sử dụng các biến và macro sẽ được tham chiếu trong chương trình của bạn * / int main () / * phương thức chính của bạn * / { int memory_read; / * điều này sẽ được sử dụng làm biến cho giá trị của các byte được đọc từ hàm getline * / int nbytes = 200; / * đây là biến số byte được phân bổ ban đầu cho luồng của bạn * / char * your_string; / * đây là biến cho đối tượng tệp ký tự được sử dụng cho luồng của bạn * / put (“Nhập dòng hoặc dòng văn bản, tại đây:”); / * nhắc người dùng nhập văn bản * / your_string = (char *) malloc (nbytes + 1); / * lưu ý toán tử ép kiểu char vì con trỏ được sử dụng sẽ là con trỏ ký tự và cũng lưu ý rằng nó được thêm 1 vào nbyte cho hàm malloc; ký tự cuối cùng được đọc bởi getline phải là một ký tự rỗng và nó được thêm vào ký tự để giải thích cho ký tự null cuối cùng sẽ được đọc * / memory_read = getline (& your_string, & nbytes, stdin); / * giá trị của bộ nhớ đã đọc sẽ được xác định bởi sự trả về của hàm getline của bạn * / if (memory_read == -1) / * nếu một ký tự không được getline đọc, thì -1 sẽ được trả về * / { put (“Lỗi: chỉ EOF mà không đọc văn bản”); / * hiển thị lỗi không có byte nào được đọc, do đó, nếu -1 đã được trả về * / } else / * nếu -1 không được trả lại * / { đặt (chuỗi_của_bạn); / * hiển thị chuỗi đã được nhập * / } trả về 0; }Dưới đây là ví dụ hiển thị không có bình luận:
#include <stdio.h> int main () { int memory_read; int nbytes = 200; char * your_string; put (“Nhập dòng hoặc dòng văn bản, tại đây:”); your_string = (char *) malloc (nbytes + 1); memory_read = getline (& your_string, & nbytes, stdin); if (memory_read == -1) { put (“Lỗi: chỉ EOF mà không đọc văn bản”); } khác { đặt (chuỗi_của_bạn); } trả về 0; }Trở lại bộ nhớ
Cần nhấn mạnh một điều rằng khi bạn sử dụng hàm malloc và hàm getline, thì khối lượng bộ nhớ này sẽ dành riêng cho bạn hoặc được cấp phát cho luồng của bạn được tham chiếu bằng cách sử dụng một con trỏ. Trong ví dụ trên, toán tử ép kiểu char sẽ được sử dụng để chỉ ra rằng kiểu ép kiểu của một ký tự được sử dụng để ép kiểu giá trị được trả về từ hàm malloc. Nếu bạn muốn sử dụng hàm realloc cho ví dụ của mình, thì dòng mã sau có thể được sử dụng như sau:
your_string = (char *) realloc (your_string, 501); / * điều này sẽ phân bổ lại một khối cho 500 byte * /Sự kết luận
Hàm C getline được biết đến là một hàm có thể được sử dụng để đọc một luồng thông qua đầu vào hoặc từ một vị trí tệp khác nhau. Hiện nay có rất nhiều phương pháp khác nhau có thể được sử dụng cùng với getline để giúp bạn tùy chỉnh các chức năng. Ngoài việc cung cấp các tùy chọn khác nhau thì getline còn có thể được sử dụng để giảm thiểu khả năng xảy ra lỗi.
Vì việc sử dụng khối bộ nhớ có thể được phân bổ lại. Để đảm bảo tất cả các ký tự đều sẽ được đọc. Ký tự rỗng đầu tiên cũng được đọc. Sau khi các ký tự này được đọc để nâng cao nhiều cơ hội cho tất cả các ký tự trong một luồng sẽ được đọc, và lỗi của chúng có thể được phát hiện bằng cách sử dụng câu lệnh if-then-else giúp cho phép bạn thực hiện một hành động nếu được trả về.
Tổng kết
Nắm được những thông tin quan trọng về hàm C getline trong ngôn ngữ lập trình. Sẽ giúp các bạn có thêm những kiến thức cần thiết. Để có thể tự tin và trau dồi kỹ năng, kinh nghiệm hơn nữa cho bản thân. Box.edu cũng mong rằng ngoài khái niệm này các bạn sẽ còn hiểu thêm. Các thuật ngữ về ngôn ngữ lập trình C hơn nữa.
5/5 - (5 bình chọn)Từ khóa » Cách Sử Dụng Getline Trong C++
-
[Wiki] Hàm Nhập Chuỗi, Ký Tự Getline Trong C/C++ - Dạy Nhau Học
-
Hướng Dẫn Sử Dụng Getline Và Fget để Nhập Chuỗi Trong C++
-
Nhập Xuất String Trong C++
-
Cin.ignore Và tline Trong C++
-
Cơ Bản Về Chuỗi Ký Tự Trong C++ (An Introduction To Std::string)
-
Hàm Nhập Chuỗi, Ký Tự Getline Trong C/C++ - Diễn đàn
-
Top 20 Cách Dùng Getline Trong C++ Mới Nhất 2022 - Final Blade
-
Kiểu Ký Tự Trong C++ Là Gì? (Phần 2) - CodeLearn
-
Hàm Getline () Trong C ++ - Hỏi Về Sự Khác Nhau Giữa Getline Và ...
-
Hướng Dẫn Sử Dụng Getline Và Fget để Nhập Chuỗi Trong C++
-
Cách Sử Dụng tline Và Setw() Trong C++ Như Thế Nào??
-
C++ — Sử Dụng Getline () Trong C ++
-
Đọc Nội Dung File Theo Dòng Trong C - CodeHub
-
Sử Dụng Getline () Trong C ++ - HelpEx