C++ Basic Input/Output

Xin chào các bạn, những lập trình viên C++ tương lai! Hôm nay, chúng ta sẽ bơi lội vào thế giới thú vị của đầu vào và đầu ra trong C++. Đừng lo nếu bạn chưa từng viết một dòng mã trước đây – chúng ta sẽ bắt đầu từ đầu và làm theo từng bước. Khi hết hướng dẫn này, bạn sẽ ngạc nhiên về mức số lượng điều bạn có thể làm được chỉ với một vài dòng mã C++!

C++ Basic Input/Output

Các Tệp Đầu Vào Thư Viện

Trước khi chúng ta có thể bắt đầu in các thông điệp lên màn hình hoặc đọc đầu vào từ người dùng, chúng ta cần bao gồm các tệp đầu vào cần thiết. Trong C++, các thao tác đầu vào và đầu ra được xử lý bởi thư viện iostream.

Hãy bắt đầu với một ví dụ đơn giản:

#include <iostream>

int main() {
// Mã của bạn sẽ nằm ở đây
return 0;
}

Đây là cấu trúc cơ bản của một chương trình C++. Dòng #include <iostream> yêu cầu trình biên dịch bao gồm thư viện iostream, điều này cung cấp cho chúng ta khả năng thao tác đầu vào và đầu ra.

Luồng Đầu Ra Tiêu Chuẩn (cout)

Bây giờ, hãy học cách hiển thị văn bản lên màn hình. Trong C++, chúng ta sử dụng cout (phát âm là "see-out") để gửi đầu ra đến console.

#include <iostream>
using namespace std;

int main() {
cout << "Hello, World!";
return 0;
}

Khi bạn chạy chương trình này, nó sẽ hiển thị "Hello, World!" lên màn hình. Hãy phân tích nó:

  • cout là đối tượng luồng đầu ra tiêu chuẩn.
  • Toán tử << được sử dụng để gửi dữ liệu đến cout.
  • Văn bản bên trong dấu ngoặc kép được gọi là một chuỗi văn bản.

Bạn cũng có thể sử dụng cout để in nhiều mục:

cout << "Tên tôi là " << "Alice" << " và tôi " << 25 << " tuổi.";

Kết quả sẽ là: "Tên tôi là Alice và tôi 25 tuổi."

Thêm Một Dòng Mới

Để di chuyển đến một dòng mới sau đầu ra, bạn có thể sử dụng manipulator endl hoặc ký tự \n:

cout << "First line" << endl;
cout << "Second line\n";
cout << "Third line" << '\n';

Luồng Đầu Vào Tiêu Chuẩn (cin)

Bây giờ khi chúng ta đã biết cách đầu ra, hãy học cách nhận đầu vào từ người dùng. Chúng ta sử dụng cin (phát âm là "see-in") cho mục đích này.

#include <iostream>
using namespace std;

int main() {
int age;
cout << "Bạn bao nhiêu tuổi? ";
cin >> age;
cout << "Bạn " << age << " tuổi!" << endl;
return 0;
}

Trong ví dụ này:

  • Chúng ta khai báo một biến số nguyên age để lưu trữ đầu vào của người dùng.
  • Chúng ta sử dụng cout để nhắc nhở người dùng nhập tuổi.
  • cin >> age đọc một số nguyên từ người dùng và lưu trữ nó trong biến age.
  • Cuối cùng, chúng ta sử dụng cout để hiển thị kết quả.

Bạn cũng có thể đọc nhiều đầu vào:

string name;
int age;
cout << "Nhập tên và tuổi của bạn: ";
cin >> name >> age;
cout << "Xin chào, " << name << "! Bạn " << age << " tuổi." << endl;

Luồng Lỗi Tiêu Chuẩn (cerr)

Trong khi cout rất tốt cho đầu ra bình thường, đôi khi chúng ta cần hiển thị các thông điệp lỗi. Đó là nơi cerr xuất hiện. Nó tương tự như cout, nhưng được sử dụng cụ thể cho các thông điệp lỗi.

#include <iostream>
using namespace std;

int main() {
int denominator = 0;
if (denominator == 0) {
cerr << "Lỗi: Không thể chia cho không!" << endl;
}
return 0;
}

Sử dụng cerr giúp phân biệt giữa đầu ra bình thường và các thông điệp lỗi, điều này có thể rất quan trọng khi gỡ lỗi các chương trình của bạn.

Luồng Ghi Nhật Ký Tiêu Chuẩn (clog)

Cuối cùng, chúng ta có clog, được sử dụng để ghi nhật ký các thông điệp. Nó tương tự như cerr, nhưng có thể được đệm, có nghĩa là đầu ra có thể không xuất hiện ngay lập tức.

#include <iostream>
using namespace std;

int main() {
clog << "Đây là một thông điệp ghi nhật ký." << endl;
return 0;
}

Trong thực tế, clog không được sử dụng nhiều như coutcerr, nhưng là tốt để biết nó tồn tại.

Định Dạng Đầu Ra

Bây giờ khi chúng ta đã quá các khái niệm cơ bản, hãy xem một số cách để định dạng đầu ra của chúng ta sao cho đẹp hơn.

Đặt Chiều Rộng Trường

Bạn có thể sử dụng manipulator setw để đặt chiều rộng của một trường:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
cout << setw(10) << "Tên" << setw(5) << "Tuổi" << endl;
cout << setw(10) << "Alice" << setw(5) << 25 << endl;
cout << setw(10) << "Bob" << setw(5) << 30 << endl;
return 0;
}

Điều này sẽ tạo ra một đầu ra đẹp đẽ:

Tên  Tuổi
Alice   25
Bob   30

Độ Chính Xác cho Các Số Thực

Đối với các số thực, bạn có thể kiểm soát độ chính xác bằng cách sử dụng setprecision:

#include <iostream>
#include <iomanip>
using namespace std;

int main() {
double pi = 3.14159265359;
cout << "Pi mặc định: " << pi << endl;
cout << "Pi đến 4 chữ số thập phân: " << fixed << setprecision(4) << pi << endl;
return 0;
}

Đầu ra:

Pi mặc định: 3.14159
Pi đến 4 chữ số thập phân: 3.1416

Tóm Tắt các Đối Tượng và Manipulator Luồng Đầu Vào/Ra

Dưới đây là một bảng hữu ích tóm tắt các đối tượng và manipulator luồng đầu vào/ra mà chúng ta đã học:

Đối Tượng/Manipulator Mô Tả Ví Dụ
cout Luồng đầu ra tiêu chuẩn cout << "Xin chào";
cin Luồng đầu vào tiêu chuẩn cin >> biến;
cerr Luồng lỗi tiêu chuẩn cerr << "Lỗi!";
clog Luồng ghi nhật ký tiêu chuẩn clog << "Thông điệp ghi nhật ký";
endl Kết thúc dòng cout << "Xin chào" << endl;
setw Đặt chiều rộng trường cout << setw(10) << "Tên";
setprecision Đặt độ chính xác số thực cout << setprecision(2) << 3.14159;

Và đó là như vậy! Bạn vừa đã học được các khái niệm cơ bản về đầu vào và đầu ra trong C++. Hãy nhớ, luyện tập sẽ làm bạn hoàn hảo, vì vậy đừng sợ thử nghiệm với các khái niệm này. Thử kết hợp chúng theo nhiều cách khác nhau, và sớm bạn sẽ viết các chương trình phức tạp một cách dễ dàng.

Chúc mãi mãi mã nguồn của bạn luôn như mong đợi và đầu vào của bạn luôn hợp lệ!

Credits: Image by storyset