Xin chào mọi người!
Bài viết hôm nay mình sẽ nói về định dạng nhập xuất trong C++. Có nhiều cách nhập xuất khác nhau, như từ bàn phím hoặc file. Bắt đầu từ những bài sau mình sẽ nói sâu hơn về C++, nên độ khó của nó cũng tăng theo. Các bạn có thắc mắc có thể comment phía bên dưới, mình sẽ đọc và reply 😀
Đối với nhập xuất bằng bàn phím, ta có cú pháp như sau:
Mã nguồn:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// Nhập vào từ bàn phím
 
// 1 biến
cin >> var1;
// Nhiều biến
cin >> var1 >> var2 >> ... ;
// Hoặc
cin >> var1
    >> var2
    >> ...;
 
// Xuất ra từ bàn phím
cout << exp;
// Hoặc
cout << exp1 << exp2 << ...;
// Hoặc
cout << exp1
     << exp2
     << ...;
Với var1, var2,.. là các biến đã được khai báo, exp1, exp2,… là các biểu thức muốn xuất ra giao diện console. Các đối tượng cin, cout đã được định nghĩa trong , muốn sử dụng phải khai báo namespace std (standard – bài viết sau mình sẽ nói về namespace, các bạn cứ khai báo theo nhé). Toán tử >> (gọi là extraction operator) dùng để đẩy dữ liệu từ bên trái qua, ngược lại với nó là toán tử << (gọi là insertion operator).
Có vẻ hơi rắc rối nhỉ :D? Chúng ta cùng đến với 1 ví dụ nhé
Mã nguồn:
1
2
3
4
5
6
7
8
9
#include <iostream>
 
using namespace std;
void main()
{
   int a, b = 5;
   cin >> a; // Nhập a
   cout << "Gia tri b = " << b; // Xuất Gia tri b = 5
}
Như mình nói ở trên, >> và << đẩy dữ liệu theo hướng của nó. Chúng ta cùng xem lại ví dụ trên nhé:
  • Dữ liệu nhập từ bàn phím (cin) được đẩy qua a
  • Các dữ liệu “Gia tri b = ” và biến b được đẩy theo thứ tự từ phải qua về màn hình console (cout). Dữ liệu nào gần cout hơn sẽ được đẩy ra console trước
Ta cùng đến với 1 ví dụ tiếp theo nhé?
Mã nguồn:
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <string>
using namespace std;
void main()
{
   string str;
   cin >> str; // Nhập "Bai tap"
   cout << str;
}
Các bạn thấy điều gì lạ không? Màn hình console chỉ xuất “Bai”, sao lạ vậy?
Điểm đầu tiên, cin KHÔNG cho phép nhập dấu cách. Khi gặp dấu cách, cin sẽ coi như dấu kết thúc dữ liệu. Điều đó làm cho chuỗi “Bai tap” chỉ còn lại “Bai”. Vậy còn chuỗi “tap” ở đâu??? Ta xét lại ví dụ trên nhưng thêm vào vài chỗ nhé 😀
Mã nguồn:
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <string>
using namespace std;
void main()
{
  string str1, str2;
  cin >> str1; // Nhập "Bai tap"
  cout << str1; cin >> str2;
  cout << str2;
}
Các bạn thấy điều gì lạ không? Cin >> str2; không cho phép chúng ta nhập dữ liệu nữa, mà lại xuất thẳng ra “Baitap”. Vậy là sao nhỉ???
Thử tưởng tượng chuỗi “Bai tap” như 1 băng chuyền, ta hình dung lại đoạn code trên như sau:
Mã nguồn:
1
"Bai" << "tap"
Như mình đã nói ở trên, cin xem dấu cách như dấu kết thúc dữ liệu, vậy nó sẽ tách chuỗi “Bai tap” thành 2 phần dữ liệu con. Các dữ liệu con nằm trong 1 “băng chuyền” mà ta gọi là bộ đệm (Buffer). Khi cin nạp dữ liệu vào biến, nó sẽ nạp theo tuần tự, cho nên chuỗi “Bai” sẽ vào trước. Điều đó làm cho bộ đệm chưa rỗng, tiếp theo lại là lệnh nạp dữ liệu vào biến, nhưng lần này đã có chuỗi kế tiếp là “tap” cho nên không thể truy nhập từ bàn phím như bình thường. Có rất nhiều cách để khắc phục, nhưng mình sử dụng cú pháp:
cin.ignore(streamsize n = 1, int delim = EOF);
Với n là số ký tự cần xoá trong buffer, delim là ký tự kết thúc việc xoá. Mình thường viết nó như thế này:
Mã nguồn:
1
cin.ignore(INT_MAX, '\n');
Do không thể xác định chiều dài của buffer, nên mình chọn số lớn nhất (nói vậy chứ buffer chỉ chứa tối đa 2000 ký tự thôi :D), và kết thúc khi gặp ký tự xuống hàng (\n)
Quay trở lại vấn đề, nếu mình muốn khi nhập chuỗi kể cả khoảng trắng thì như thế nào? Đơn giản thôi, ta sử dụng câu lệnh:
getline(cin, string& str);
Trên đây là bài viết về CIN/COUT trong C++. Cảm ơn các bạn đã theo dõi!
Đánh giá bài viết này để tác giả có động lực hơn nhé!
Axact

Administrator:

Xin chào, tôi là Nguyễn Quý Quang Huy. Tôi 14 tuổi và sinh sống tại Hoài Đức, Hà Nội. Tôi lập ra Rinne-IT Blog này nhằm chia sẻ những kiến thức mình có và những bài viết hay trên mạng do tôi tổng hợp. Blog đang trong giai đoạn phát triển nên nếu có lỗi mong các bạn bỏ qua. Tôi luôn chào đón những ý kiến phát triển từ từ các bạn. Giờ thì hãy khám phá blog của tôi nào ^_^

Bình Luận:

0 bình luận: