Bài 3: Câu lệnh xuất dữ liệu trong C++.
Chào mừng các bạn quay trở lại với TUT hướng dẫn lập trình C++ cơ bản. Trong 2 bài viết trước chúng ta đã cùng nhau xây dựng chương trình đầu tiên, tìm hiểu về cấu trúc của một chương trình. Hôm nay mình sẽ nói về cách mà chúng ta có thể đưa dữ liệu lên màn hình console cùng với một số định dạng cơ bản. Bắt đầu nào.
3.1. Cơ chế của việc xuất dữ liệu.
Qua hai bài học trước phần nào các bạn cũng đã quen với câu lệnh cout và nhiệm vụ của nó. Nhưng điều mà bạn hiểu chỉ là “bề nổi của tảng băng” mà thôi.
Thực tế câu lệnh cout không hề có tác dụng đưa dữ liệu lên màn hình, nhiều người vẫn nhầm tưởng điều này. Vậy thì nhiệm vụ thực sự của cout là gì và làm sao dữ liệu có thể hiển thị trên màn hình được. Cout là một đối tượng được định nghĩa trong thư viện iostream. Nhiệm vụ của cout là dẫn đường cho dữ liệu, khi chúng ta dùng câu lệnh, cout sẽ mặc định kết nối với output stream có tên là stdout. Dữ liệu được đưa vào đối tượng file stdout này sẽ được chuyển lên màn hình.
3.2. Sử dụng lệnh cout để xuất dữ liệu.
Như bài viết trước mình đã nói, để có thể sử dụng được cout thì chúng ta cần khai báo thư viện iostream kèm theo câu lệnh “using namespace std“.
Xét ví dụ nhé:
Các bạn mở Dev C++ và viết lại code này giúp mình.
#include <iostream> using namespace std; int main() { cout << "Xin chao tuhoclaptrinh.vn"; cout << "Ten toi la: C++"; }
- Để có thể đưa một chuỗi kí tự lên màn hình chúng ta sẽ đặt chúng trong dấu nháy kép ” “.
- Các bạn có thấy hai dấu nhỏ hơn “<<” nằm sau cout và nằm trước chuỗi kí tự cần đưa lên màn hình không. Đây chính là toán tử gắn liền với câu lệnh cout. Dữ liệu nằm sau toán tử này sẽ được đẩy lên màn hình.
Lưu lại chương trình, biên dịch và chạy giúp mình đi nào. (hình):
Kết quả không được như ý các bạn phải không. Bây giờ các viết thêm một khoảng trắng trước từ “Ten” hoặc sau từ “tuhoclaptrinh.vn”. Ở đây mình sẽ thêm trước từ “Ten”:
#include <iostream> using namespace std; int main() { cout << "Xin chao tuhoclaptrinh.vn"; cout << " Ten toi la: C++"; }
Giờ thì f11 và thưởng thức: (hình).
Vừa ý các bạn chưa. Chắc có bạn đang đặt câu hỏi là tại sao khi code chúng ta viết dữ liệu trên 2 dòng mà khi dữ liệu hiển thị lên thì lại nằm hoàn toàn trên một dòng phải không. Đừng vội lo lắng mình sẽ chỉ các bạn ở mục 3.3 nhé. Giờ thì tiếp tục thôi.
Bạn đừng nên nghĩ cout chỉ dùng để đưa chuỗi kí tự lên màn hình nhé. Ngoài chuỗi kí tự ra dữ liệu cũng có thể là số thậm chí cout cũng có thể tính toán những phép toán đơn giản. Ví dụ:
#include <iostream> using namespace std; int main() { cout << "5 * 5 + 12 = " << 5 * 5 + 12; }
Kết quả khi chạy chương trình. (hình):
Phân tích nè:
- Khi các bạn đặt số trong dấu nháy kép mặc định số đó sẽ được hiểu là kí tự, vì vậy dữ liệu sẽ được hiển thị toàn bộ ra màn hình y như dạng chúng ta đã nhập.
- Mặt khác khi những con số không nằm trong dấu nháy kép. Chúng được hiểu đúng nghĩa là những con số và vì thế phép toán được thực hiện đưa kết quả lên màn hình.
- Vậy thì sao chúng ta không viết:
#include <iostream> using namespace std; int main() { cout << "5 * 5 + 12 = " 5 * 5 + 12; }
- Không được đâu nhé. Các bạn cứ hiểu như này giúp mình cho dễ. Với mỗi toán tử “<<” chúng chỉ có thể đẩy 1 kiểu dữ liệu lên màn hình. Nếu viết như trên toán tử “<<” sẽ phải đẩy đồng thời 1 chuỗi kí tự và một số sau khi phép tính được thực hiện lên màn hình console. Điều này là không cho phép vậy nên chúng ta sẽ dùng thêm một toán tử “<<” để dữ liệu được hiển thị toàn bộ.
3.3. Định dạng dữ liệu cơ bản hiển thị trên màn hình Console.
Tiếp tục với vấn đề còn đang dang dở ở mục trên nhé. Tại sao dữ liệu lại không xuống dòng???. Như mình đã nói ở về cơ chế xuất dữ liệu ở đầu bài. Cout chỉ có nhiệm vụ dẫn đường cho dữ liệu tìm đến stdout. Chính stdout mới quyết định việc dữ liệu được hiển thị như thế nào trên console. Điều kiện để stdout cho dữ liệu xuống dòng là khi chúng ta tác động vào nó hoặc khi dữ liệu đã hiển thị hết một dòng trên màn hình console (chắc các bạn đang nghĩ mình sẽ thay đổi kích thước màn hình console phải không, tất nhiên là không nhé). Vậy để dữ liệu được như ý mình muốn chúng ta sẽ tác động vào stdout.
3.3.1. Newline “\n” và endl.
Đối tượng đầu tiên giúp dữ liệu có thể xuống dòng. Về kết quả mà “\n” và endl đều giống nhau.Nhưng giữa chúng thì lại có sự khác nhau. Mình sẽ không nói về điểm khác nhau giữa hai đối tượng này. Ở bài này mình chỉ cần các bạn hiểu được công dụng mà các đối tượng này mang lại thôi. Khi gặp một trong hai đối tượng “\n” và endl dữ liệu còn lại phía sau sẽ được bắt đầu tại một dòng mới, với các bạn mới tiếp cận C++ bạn thích dùng cái gì thì tuỳ bạn thôi.
Giờ thì áp dụng ngay nào. Ở đây mình dùng cả endl và “\n” các bạn để ý vị trí giúp mình.
#include <iostream> using namespace std; int main() { cout << "Xin chao tuhoclaptrinh.vn" << endl; cout << "\nTen toi la: C++"; }
Phân tích ví dụ:
Ở cuối câu lệnh cout thứ nhất mình đã dùng endl. Như đã nói ở trên tất cả dữ liệu còn lại phía sau sẽ được bắt đầu ở dòng mới.
Tiếp tục với câu lệnh cout thứ hai lúc này mình lại dùng “\n” ngay trước dữ liệu. Kết quả là chúng ta đã tạo ra một dòng trống không có dữ liệu được hiển thị. Tất cả dữ liệu sẽ lại được bắt đầu ở một dòng mới. (hình):
3.3.2. Các đối tượng định dạng khác
Thực tế việc định dạng dữ liệu đầu ra trong C++ khá đa dạng. Ở trên mình mới chỉ nêu ra “\n” và endl. Ngoài ra còn có “\t“, “\v“, “\a“, “\b” ….. rất nhiều nữa. Nhưng theo mình thấy chúng ta hay dùng nhất đó là hai kí tự xuống dòng và “\t“.
Bây giờ mình sẽ test thử xem công dụng của đối tượng “\t” nhé.
#include <iostream> using namespace std; int main() { cout << "\tXin chao tuhoclaptrinh.vn" << endl; cout << "\tTen toi la: C++"; }
Mình đã thêm hai đối tượng “\t” vào hai câu lệnh cout của chúng ta, cùng với đó vẫn giữ lại endl ở cuối lệnh cout thứ nhất để dữ liệu được xuống dòng. Các bạn để ý vị trí giúp mình nhé. Lưu lại và F11 nào. (hình):
Vậy là đối tượng “\t” có tác dụng như khi chúng ta ấn phím tab trong soạn thảo văn bản vậy. Còn các bạn hãy thử với những đối tượng mình đã nêu ra ở trên xem chúng làm được gì nhé.
Bài 3 của mình đến đây là kết thúc. Mong rằng sau bài học các bạn sẽ thêm hiểu về lệnh cout cũng như cách định dạng cho dữ liệu khi hiển thị lên màn hình. Mình sẽ quay lại trong các bài học tiếp theo. Goodbye! See you again.