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á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 đếncout
. - 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ếnage
. - 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ư cout
và cerr
, 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