C++: Bài 11. nhập (cin) và xuất (cout)


Đă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 nhập/xuất phong phú mà chúng ta sẽ thấy trong các bài viết tiếp sau. Bài viết 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++.

C++ I/O xảy ra trong các luồng, là chuỗi các byte. Nếu byte chảy 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à hoạt động nhập và nếu byte chảy 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 xuất.

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

Ta 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, tương ứng.

<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 chương 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ị. cout được sử dụng kết hợp với toán tử chèn luồng, được viết dưới dạng << là hai dấu nhỏ hơn như thể hiện trong ví dụ sau.

#include<iostream>
using namespace std;

main(){
  char str[]="Xin chào C ++";

  cout<<"Giá tr ca str là:"<<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:

Giá trị của str là: Hello C ++

Trình biên dịch C ++ cũng xác định kiểu dữ liệu của biến đượ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ị int, float, double, string và con trỏ.

Toán tử chèn << 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 vào cuối dòng.

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. cin được sử dụng kết hợp với toán tử trích xuất dòng, được viết là >> là hai dấu lớn hơn như thể hiện trong ví dụ sau.

#include<iostream>
using namespace std;

main(){
  char name[50];

  cout<<"Vui lòng nhp vào tên ca bn: ";
  cin>>name;
  cout<<"Tên bn là: "<<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:

Vui lòng nhập tên của bạn: V1Study
Tên bạn là: V1Study

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 xuất luồ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. Để nhập 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.

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

#include<iostream>
using namespace std;

main(){
  char str[]="Không th đc ...";

  cerr<<"Thông báo li: "<<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:

Thông báo lỗi: Không thể đọc ...

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.

Bộ 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;

main(){
  char str[]="Không th đc ...";

  clog<<"Thông báo li: "<<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:

Thông báo lỗi: Không thể đọc ...

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. Vì vậy, cách thực hành tố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 !!!