C++: Bài 28. Input và Output


Đăng ký nhận thông báo về những video mới nhất

Các thư viện tiêu chuẩn C++ cung cấp một tập hợp các khả năng input/output phong phú. Bài học này sẽ thảo luận về các hoạt động I/O rất cơ bản và phổ biến nhất cần thiết cho lập trình C++.

I/O xảy ra trong các luồng (stream), là chuỗi các byte. Nếu dữ liệu đến từ một thiết bị như bàn phím, ổ đĩa hoặc kết nối mạng, v.v. tới bộ nhớ chính, thì đây được gọi là thao tác input (đầu vào) và nếu dữ liệu xuất phát từ bộ nhớ chính đến một thiết bị như màn hình hiển thị, máy in, ổ đĩa , hoặc kết nối mạng, v.v., đây được gọi là hoạt động output (đầu ra).

Tệp tiêu đề thư viện I/O

Có các tệp tiêu đề sau quan trọng đối với các chương trình C++:

Tệp tiêu đề: Chức năng và Mô tả

<iostream>

Tệp này xác định các đối tượng cin, cout, cerr và clog , tương ứng với luồng đầu vào tiêu chuẩn, luồng đầu ra tiêu chuẩn, luồng lỗi tiêu chuẩn không được đệm và luồng lỗi tiêu chuẩn được đệm.

<iomanip>

Tệp này khai báo các dịch vụ hữu ích để thực hiện I/O được định dạng với trình thao tác luồng được tham số hóa, chẳng hạn như setw và setpre precision.

<fstream>

Tệp này khai báo các dịch vụ xử lý tệp do người dùng kiểm soát. Chúng ta sẽ thảo luận chi tiết về nó trong các bài viết liên quan đến Tệp và Luồng.

Luồng đầu ra tiêu chuẩn (cout)

Đối tượng được xác định trước cout là một thể hiện của lớp ostream. Đối tượng cout được cho là "kết nối với" thiết bị đầu ra tiêu chuẩn, thường là màn hình hiển thị. Các cout được sử dụng kết hợp với toán tử chèn dòng (<<) như trong ví dụ sau.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Hello C++";
 
   cout << "Gia tri luu trong str la: " << str << endl;

   return 0;
}

Kết quả:

Gia tri luu trong str la: Hello C++

Trình biên dịch C++ cũng xác định kiểu dữ liệu của biến sẽ được xuất ra và chọn toán tử chèn luồng thích hợp để hiển thị giá trị. Toán tử << được nạp chồng để xuất ra các mục dữ liệu của các kiểu có sẵn giá trị nguyên, float, double, chuỗi và con trỏ.

Toán tử << có thể được sử dụng nhiều lần trong một câu lệnh như được hiển thị ở trên và endl được sử dụng để thêm một dòng mới.

Luồng đầu vào chuẩn (cin)

Đối tượng được xác định trước cin là một thể hiện của lớp istream . Đối tượng cin được cho là được gắn vào thiết bị nhập chuẩn, thường là bàn phím. Các cin được sử dụng kết hợp với các nhà điều hành khai thác dòng, được viết như sau >> mà hai lớn hơn dấu hiệu như trong ví dụ sau.

#include <iostream>
 
using namespace std;
 
int main() {
   char name[50];
 
   cout << "Moi nhap ten: ";
   cin >> name;
   cout << "Ten ban la: " << name << endl;
 
}

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ nhắc bạn nhập tên. Bạn nhập một giá trị rồi nhấn enter để xem kết quả sau:

Moi nhap ten: cplusplus
Ten ban la: cplusplus

Trình biên dịch C++ cũng xác định kiểu dữ liệu của giá trị đã nhập và chọn toán tử trích dòng thích hợp để trích xuất giá trị và lưu trữ nó trong các biến đã cho.

Toán tử trích xuất luồng >> có thể được sử dụng nhiều lần trong một câu lệnh. Để yêu cầu nhiều hơn một dữ liệu, bạn có thể sử dụng như sau:

cin >> name >> age;

Điều này sẽ tương đương với hai câu lệnh sau:

cin >> name;
cin >> age;

Luồng lỗi chuẩn (cerr)

Đối tượng xác định trước cerr là một thể hiện của lớp ostream. Đối tượng cerr được cho là được gắn vào thiết bị lỗi chuẩn, cũng là một màn hình hiển thị nhưng đối tượng cerr không được đệm và mỗi lần chèn luồng vào cerr sẽ khiến đầu ra của nó xuất hiện ngay lập tức.

Các cerr cũng được sử dụng kết hợp với toán tử chèn dòng như trong ví dụ sau.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   cerr << "Co loi: " << str << endl;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Co loi: Unable to read....

Luồng nhật ký chuẩn (clog)

Đối tượng được xác định trước clog là một thể hiện của lớp ostream. Đối tượng clog được cho là được gắn vào thiết bị lỗi tiêu chuẩn, cũng là một màn hình hiển thị nhưng đối tượng clog được đệm. Điều này có nghĩa là mỗi lần chèn để làm clog có thể khiến đầu ra của nó được giữ trong bộ đệm cho đến khi bộ đệm được lấp đầy hoặc cho đến khi bộ đệm được xả sạch.

clog cũng được sử dụng kết hợp với toán tử chèn luồng như thể hiện trong ví dụ sau.

#include <iostream>
 
using namespace std;
 
int main() {
   char str[] = "Unable to read....";
 
   clog << "Thong bao loi: " << str << endl;
}

Khi đoạn mã trên được biên dịch và thực thi, nó tạo ra kết quả sau:

Thong bao loi: Unable to read....

Bạn sẽ không thể thấy bất kỳ sự khác biệt nào về cout, cerr và clog với những ví dụ nhỏ này, nhưng trong khi viết và thực thi các chương trình lớn, sự khác biệt trở nên rõ ràng hơn. Vì vậy, cách tốt nhất là hiển thị thông báo lỗi bằng cách sử dụng luồng cerr và trong khi hiển thị các thông báo nhật ký khác thì nên sử dụng clog.


Nếu bạn có điều thắc mắc, bạn hãy comment cho V1Study để được giải đáp.
Bài viết này được chia sẻ bởi LongDT. Nếu bạn muốn chia sẻ bài viết, bạn hãy Đăng ký làm thành viên!
« Prev
Next »
Copied !!!