C++ Đầu vào/đầu ra cơ bản: Ví dụ về Cout, Cin, Cerr
Luồng trong là gì C++?
C++ cung cấp cho người dùng một số thư viện mà họ có thể sử dụng để thực hiện các tác vụ đầu vào/đầu ra. Các tác vụ này được thực hiện dưới dạng chuỗi byte, thường được gọi là luồng.
Các luồng được chia thành hai:
Các loại luồng
- Luồng đầu vào: Đây là một loại luồng trong đó các byte truyền từ một thiết bị như bàn phím đến bộ nhớ chính.
- Luồng đầu ra: Đây là loại luồng trong đó các byte chảy theo hướng ngược lại, tức là từ bộ nhớ chính đến thiết bị như màn hình hiển thị.
Các luồng hoạt động như thế nào?
C++ luồng hoạt động như sau:
- Đầu tiên, một luồng được khởi tạo với đúng loại.
- Tiếp theo, bạn nên nêu rõ nơi I / O sẽ xảy ra bằng cách sử dụng con trỏ get/put.
- Sau khi đến đúng vị trí trong luồng, bạn có thể thực hiện các tác vụ đầu vào và đầu ra bằng cách sử dụng toán tử >> và << tương ứng.
Bảng chức năng
Sau đây là các chức năng được cung cấp trong tệp tiêu đề stream.h:
Lớp | Chức năng |
---|---|
Filebuf | Nó thiết lập bộ đệm tệp để đọc/ghi. Nó có các hàm close() và open() trong đó |
cơ sở dữ liệu | Đây là lớp cơ sở cho các lớp ifstream, fstream và ofstream. Hoạt động của nó là phổ biến đối với các luồng tập tin. |
nếu dòng | Đây là lớp luồng tệp đầu vào để cung cấp các hoạt động đầu vào. |
ngoài dòng | Đây là lớp luồng tệp đầu ra để cung cấp các hoạt động đầu ra. |
dòng chảy | Đây là lớp luồng đầu vào/đầu ra. Nó hỗ trợ các hoạt động đầu vào/đầu ra đồng thời. |
C++ Tệp tiêu đề cho Đầu vào/Đầu ra
C++ cung cấp ba thư viện đi kèm với các chức năng để thực hiện các tác vụ nhập/xuất cơ bản. Chúng bao gồm:
- Dòng chảy: Đó là từ viết tắt của luồng đầu vào/đầu ra tiêu chuẩn. Tệp tiêu đề này đi kèm với các định nghĩa cho các đối tượng như cin/ cout/cerr.
- Iomanip: Đó là từ viết tắt của bộ điều khiển đầu vào/đầu ra. Thư viện đi kèm với các chức năng có thể được sử dụng để thao tác với các luồng. Nó chứa các định nghĩa cho các đối tượng như setw, setprecision và các đối tượng khác.
- Dòng chảy: Đây là tệp tiêu đề để mô tả luồng tệp. Nó xử lý dữ liệu được đọc từ tệp dưới dạng đầu vào hoặc được ghi vào tệp, đầu ra.
Từ khóa cin và cout rất phổ biến ở C++. Chúng được sử dụng để lấy đầu vào và đầu ra in tương ứng. Để sử dụng chúng, bạn phải đưa tệp tiêu đề iostream vào chương trình của mình. Lý do là chúng được xác định trong tệp tiêu đề đó. Việc không bao gồm tệp tiêu đề iostream sẽ gây ra lỗi. Điều này là kết quả của sự thất bại của C++ trình biên dịch để hiểu ý nghĩa của từ khóa.
Các đối tượng chính được xác định trong tệp tiêu đề iostream là cin, cout, cerr và clog. Hãy thảo luận về chúng.
std :: cout
Đối tượng cout là một thể hiện của lớp iostream. Nó được sử dụng để tạo đầu ra trên thiết bị đầu ra tiêu chuẩn, thường là màn hình. Nó được sử dụng cùng với toán tử chèn luồng (<<).
Ví dụ
#include <iostream> using namespace std; int main() { char welcome[] = "Welcome to Guru99"; cout << welcome << endl; return 0; }
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream nơi đối tượng cout được xác định.
- Bao gồm không gian tên std để chúng ta không phải gọi nó khi sử dụng các lớp của nó.
- Gọi hàm main(). Mã chương trình phải được thêm vào trong phần thân của nó. Dấu ngoặc nhọn mở đầu { đánh dấu sự bắt đầu của phần thân.
- Tạo một biến ký tự có tên là Welcome để giữ chuỗi Chào mừng đến với Guru99.
- In giá trị của chuỗi chào mừng trên bảng điều khiển. Cuối cùng là một C++ từ khóa có nghĩa là dòng cuối cùng. Nó di chuyển con trỏ để bắt đầu in văn bản trên dòng tiếp theo.
- Chương trình phải trả về giá trị khi thực hiện thành công.
- Kết thúc phần thân của hàm main().
std::cin
Đối tượng cin là một thể hiện của lớp istream. Nó đọc đầu vào từ thiết bị đầu vào, bàn phím. Nó thường được sử dụng cùng với toán tử trích xuất (>>). Đối tượng trích xuất có nhiệm vụ trích xuất dữ liệu được nhập qua bàn phím từ đối tượng cin.
Ví dụ
Ví dụ sau đây minh họa cách sử dụng từ khóa cin trong C++:
#include <iostream> using namespace std; int main() { int number; cout << "Enter a number:"; cin >> number; cout << "\nYou entered: " << number; return 0; }
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Đưa tệp tiêu đề iostream vào chương trình của chúng tôi. Đối tượng cin được xác định trong tệp tiêu đề này.
- Bao gồm không gian tên std để sử dụng các lớp của nó. Bạn sẽ không phải gọi std khi sử dụng các lớp của nó.
- Gọi hàm main(). Mã chương trình phải được thêm vào trong phần thân của nó.
- Sự bắt đầu của phần thân của chương trình.
- Khai báo một biến số nguyên số có tên.
- In thông báo lên màn hình nhắc người dùng nhập số.
- Đọc giá trị do người dùng nhập vào bảng điều khiển từ bàn phím.
- In giá trị đọc ở trên trên bảng điều khiển cùng với văn bản khác.
- Chương trình sẽ trả về một giá trị nếu nó thực thi thành công.
- Kết thúc phần thân của hàm chính.
std::cerr
Đối tượng cerr tạo ra luồng lỗi tiêu chuẩn để xuất ra các lỗi trong C++. Cerr là một thể hiện của lớp ostream. Đối tượng cerr không được đệm. Điều này có nghĩa là nó được sử dụng khi thông báo lỗi cần được hiển thị ngay lập tức.
Vì nó không được đệm nên nó không lưu trữ thông báo lỗi để hiển thị sau. Nó được sử dụng cùng với toán tử chèn luồng (<<).
Ví dụ
#include <iostream> using namespace std; int main() { cerr << "An Error occurred!"; return 0; }
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream trong đó đối tượng cerr đã được xác định.
- Bao gồm không gian tên std để chúng ta không phải gọi nó khi sử dụng các lớp của nó.
- Gọi hàm main(). Logic chương trình nên được thêm vào trong phần thân của nó. Dấu ngoặc nhọn mở đầu đánh dấu sự bắt đầu của phần thân hàm.
- Sử dụng đối tượng cerr để in lỗi trên bảng điều khiển.
- Chương trình phải trả về một giá trị khi thực hiện thành công.
- Kết thúc phần thân của hàm chính.
std::làm tắc nghẽn
Đối tượng clog là một thể hiện của lớp ostream. Nó được sử dụng để hiển thị lỗi trên màn hình chuẩn, màn hình. Nó tương tự như đối tượng cerr, nhưng nó được đệm. Vì nó được đệm, nó lưu trữ thông báo lỗi trong bộ đệm cho đến khi bộ đệm được lấp đầy/xóa. Nó được sử dụng cùng với toán tử chèn luồng (<<).
Ví dụ
#include <iostream> using namespace std; int main() { clog << "An Error occurred!"; return 0; }
Đầu ra:
Đây là ảnh chụp màn hình của mã:
Giải thích mã:
- Bao gồm tệp tiêu đề iostream trong đó đối tượng tắc nghẽn được xác định.
- Bao gồm không gian tên std để chúng ta có thể sử dụng các lớp của nó mà không cần gọi nó.
- Gọi hàm main(). Logic chương trình nên được thêm vào trong phần thân của nó. { đánh dấu sự bắt đầu của phần thân hàm.
- Sử dụng đối tượng tắc nghẽn để in lỗi trên đầu ra tiêu chuẩn, màn hình.
- Chương trình phải trả về một giá trị sau khi hoàn thành thành công.
- Phần cuối của hàm main().
Xử lý lỗi với luồng IO
Để kiểm tra xem một luồng có hợp lệ hay không, bạn có thể sử dụng luồng đó làm Boolean.
Đây là một ví dụ:
ifstream file( "myfile.txt" ); if ( ! file ) { cout << "File NOT opened!" << endl; }
Để biết thêm chi tiết về trạng thái luồng, bạn có thể sử dụng các hàm sau:
- good()- sẽ trả về true nếu tất cả đều ổn.
- bad()- sẽ trả về true nếu xảy ra lỗi nghiêm trọng.
- failed()- sẽ trả về true sau hoạt động truyền phát không thành công.
- eof()- sẽ trả về true nếu nó đến cuối tệp.
Để biết liệu một thao tác đọc/ghi cụ thể có thất bại hay không, hãy kiểm tra kết quả đọc.
Ví dụ: để kiểm tra xem người dùng đã nhập số nguyên hợp lệ hay chưa, hãy thực hiện việc này:
int p; if ( cin >> p ) { cout << "Enter valid number" << endl; }
Tổng kết
- Các tác vụ đầu vào và đầu ra Trong C++ được thực hiện thông qua chuỗi byte. Các byte được gọi là luồng.
- Trong luồng đầu vào, các byte sẽ truyền từ thiết bị đầu vào như bàn phím đến bộ nhớ chính.
- Trong luồng đầu ra, các byte từ bộ nhớ chính sẽ đến thiết bị đầu ra như màn hình.
- Đối tượng cin là một thể hiện của lớp istream. Nó đọc đầu vào từ một thiết bị đầu vào như bàn phím.
- Đối tượng cout là một thể hiện của lớp ostream. Nó tạo ra đầu ra trên các thiết bị đầu ra như màn hình.
- Đối tượng cerr là một thể hiện của lớp ostream. Nó hiển thị các đối tượng lỗi trên màn hình.
- Đối tượng tắc nghẽn là thể hiện của lớp ostream. Nó hiển thị thông báo lỗi trên các thiết bị đầu ra.
- Đối tượng clog lưu trữ các thông báo lỗi, trong khi đối tượng cerr thì không.