getline và ignore trong C++ | Laptrinhcanban.com

HOME › >>

getline và ignore trong C++

Cùng tìm hiểu về cin.ignore và cin.getline trong C++ . Bạn sẽ biết ý nghĩa của các lệnh này cũng như cách sử dụng chúng để trích xuất ký tự từ các dữ liệu đầu vào từ người trong C++ sau bài học này.

cin.ignore trong C++

Trong bài cout và cin trong C++ chúng ta đã biết cin là một đối tượng trong class istream.

Do vậy, chúng ta có thể sử dụng các hàm thành viên được khai báo trong class này. Và một trong số đó chính là cin.ignore trong C++.

cin.ignore trong C++ là một hàm thành viên trong class istream có tác dụng trích xuất các ký tự từ luồng đầu vào tiêu chuẩn (cin) và loại bỏ chúng, cho đến khi đã trích xuất đủ số ký tự chỉ định, hoặc là cho tới khi tìm thấy ký tự phân tách được chỉ định.

Hàm in.ignore sẽ dừng trích xuất ký tự nếu đã đến cuối dữ liệu (EOF). Và nếu hàm dừng trước khi trích xuất đủ số ký tự hoặc tìm thấy ký tự chỉ định, flag chứa thông tin lỗi sẽ được trả về.

Chúng ta sử dụng hàm cin.ignore trong C++ với cú pháp như sau:

cin.ignore( n, delim);

Trong đó n là số ký tự cần trích xuất, và delim là ký tự phân tách cần tìm.

Ví dụ cụ thể, chúng ta tiến hành trích xuất ký tự cho tới khi tìm thấy khoảng trắng trong chuỗi được nhập như sau:

#include <iostream>
using namespace std;

int main () {
char first, last;

cout << "Nhập tên họ cách nhau bởi dấu cách:\n";

first = cin.get(); //Dùng hàm get để lấy ký tự đầu tiên
cin.ignore(256,' '); //Bỏ qua cho tới khi tìm thấy dấu cách

last = cin.get(); //Dùng hàm get để lấy ký tự tiếp theo

cout << "Tên viết tắt của bạn: " << first << last << '\n';

return 0;
}

Khi chạy chương trình, chuỗi ký tự nhập từ bàn phím sẽ được lưu vào cin. Sau đó ký tự đầu tiên từ chuỗi sẽ được lấy ra bằng hàm get().

Rồi bằng hàm cin.ignore(), chúng ta sẽ trích xuất và bỏ qua các ký tự, cho tới khi tìm thấy dấu cách đầu tiên.

Và tại vị trí đó trong cin, chúng ta dùng lại hàm get() để lấy 1 ký tự tiếp theo. Và kết quả, 2 ký tự đầu các từ sẽ được lấy ra và in ra màn hình như sau:
cin.ignore trong C++

cin.getline trong c++

Tương tự như cin.ignore() thì cin.getline trong C++ là một hàm thành viên trong class istream có tác dụng trích xuất các ký tự từ luồng đầu vào tiêu chuẩn (cin) và lưu lại dưới dạng chuỗi ký tự, cho tới khi tìm thấy ký tự phân tách được chỉ định, hoặc cho đến khi đã trích xuất đủ số ký tự chỉ định.

Hàm in.getline sẽ dừng trích xuất ký tự nếu đã đến cuối dữ liệu (EOF). Và nếu hàm dừng trước khi trích xuất đủ số ký tự hoặc tìm thấy ký tự phân tách chỉ định, flag chứa thông tin lỗi sẽ được trả về.

Chúng ta sử dụng hàm cin.getline trong C++ với cú pháp như sau:

cin.getline( str, n [, delim]);

Trong đó str là biến dùng để lưu kết quả trích xuất, n là số ký tự cần trích xuất, và delim là ký tự phân tách.

Lưu ý delim có thể được lược bỏ khi dùng hàm cin.getline trong C++. Khi đó, chương trình sẽ dùng giá trị mặc định là ký tự xuống dòng \n để quyết định khi nào dừng hàm.

Ví dụ cụ thể, chúng ta tiến hành trích xuất ký tự cho tới khi xuất hiện ký tự xuống dong trong chuỗi nhập vào như sau:

#include <iostream>
using namespace std;

int main () {
char name[256], title[256];

cout << "Nhập tên bạn: ";
cin.getline (name,256);

cout << "Nhập tên thú cưng: ";
cin.getline (title,256);

cout << "Tên thú cưng của "<<name << " là "<< title;

return 0;
}

Kết quả, các dòng được nhập sẽ được lưu vào cin, sau đó được trích xuất bằng hàm cin.getline() dựa theo ký tự xuống dòng (khi nhân Enter) và lưu vào các biến, trước khi được in ra màn hình như sau:

cin.getline trong C++

Tổng kết

Trên đây Kiyoshi đã hướng dẫn bạn về cin.getline và cin.ignore 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/cpp/lap-trinh-cpp-co-ban/nhap-xuat-trong-cpp/getline-ignore-trong-cpp/

Hãy chia sẻ và cùng lan tỏa kiến thức lập trình Nhật Bản tại Việt Nam!

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.