Toán tử xuất <<
Toán tử này cho phép xuất giá trị của dãy các biểu thức đến một dòng Output_stream nào đó với cú pháp chung như sau:
Output_stream << bt_1 << bt_2 << …
ở đây Output_stream là đối tượng thuộc lớp ostream. Trường hợp Output_stream là cout, câu lệnh xuất sẽ được viết:
cout << bt_1 << bt_2 << …
câu lệnh này cho phép in kết quả của các biểu thức ra màn hình. Kiểu dữ liệu của các biểu thức có thể là số nguyên, thực, kí tự hoặc xâu kí tự.
ĐỊNH DẠNG
Các giá trị in ra màn hình có thể được trình bày dưới nhiều dạng khác nhau thông qua các công cụ định dạng như các phương thức, các cờ và các bộ phận khác được khai báo sẵn trong các lớp ios và ostream.
Các phương thức định dạng Chỉ định độ rộng cần in
cout.width(n) ;
Số cột trên màn hình để in một giá trị được ngầm định bằng với độ rộng thực (số chữ số, chữ cái và kí tự khác trong giá tị được in). Để đặt lại độ rộng màn hình dành cho giá trị cần in (thông thường lớn hơn độ rộng thực) ta có thể sử dụng phương thức trên.
Phương thức này cho phép các giá trị in ra màn hình với độ rộng n. Nếu n bé hơn độ rộng thực sự của giá trị thì máy sẽ in giá trị với số cột màn hình bằng với độ rộng thực. Nếu n lớn hơn độ rộng thực, máy sẽ in giá trị căn theo lề phải, và để trống các cột thừa phía trước giá trị được in. Phương thức này chỉ có tác dụng với giá trị cần in ngay sau nó. Ví dụ:
int a = 12; b = 345; // độ rộng thực của a là 2, của b là 3
cout << a; // chiếm 2 cột màn hình
cout.width(7); // đặt độ rộng giá trị in tiếp theo là 7
cout << b; // b in trong 7 cột với 4 dấu cách đứng trước
Kết quả in ra sẽ là: 12<><><><>345
Chỉ định kí tự chèn vào khoảng trống trước giá trị cần in
cout.fill(ch) ;
Kí tự độn ngầm định là dấu cách, có nghĩa khi độ rộng của giá trị cần in bé hơn độ rộng chỉ định thì máy sẽ độn các dấu cách vào trước giá trị cần in cho đủ với độ rộng chỉ định. Có thể yêu cầu độn một kí tự ch bất kỳ thay cho dấu cách bằng phương thức trên. Ví dụ trong dãy lệnh trên, nếu ta thêm dòng lệnh cout.fill('*') trước khi in b chẳng hạn thì kết quả in ra sẽ là: 12****345.
Phương thức này có tác dụng với mọi câu lệnh in sau nó cho đến khi gặp một chỉ định mới.
Chỉ định độ chính xác (số số lẻ thập phân) cần in
cout.precision(n) ;
Phương thức này yêu cầu các số thực in ra sau đó sẽ có n chữ số lẻ. Các số thực trước khi in ra sẽ được làm tròn đến chữ số lẻ thứ n. Chỉ định này có tác dụng cho đến khi gặp một chỉ định mới. Ví dụ:
int a = 12.3; b = 345.678; // độ rộng thực của a là 4, của b là 7
cout << a; // chiếm 4 cột màn hình
cout.width(10); // đặt độ rộng giá trị in tiếp theo là 10
cout.precision(2); // đặt độ chính xác đến 2 số lẻ
cout << b; // b in trong 10 cột với 4 dấu cách đứng trước
Kết quả in ra sẽ là: 12.3<><><><>345.68
Các cờ định dạng
Một số các qui định về định dạng thường được gắn liền với các "cờ". Thông thường nếu định dạng này được sử dụng trong suốt quá trình chạy chương trình hoặc trong một khoảng thời gian dài trước khi gỡ bỏ thì ta "bật" các cờ tương ứng với nó. Các cờ được bật sẽ có tác dụng cho đến khi cờ với định dạng khác được bật. Các cờ được cho trong file tiêu đề iostream.h.
Để bật/tắt các cờ ta sử dụng các phương thức sau:
cout.setf(danh sách cờ); // Bật các cờ trong danh sách
cout.unsetf(danh sách cờ); // Tắt các cờ trong danh sách
Các cờ trong danh sách được viết cách nhau bởi phép toán hợp bit (|). Ví dụ lệnh cout.setf(ios::left | ios::scientific) sẽ bật các cờ ios::left và ios::scientific. Phương thức cout.unsetf(ios::right | ios::fixed) sẽ tắt các cờ ios::right | ios::fixed.
Dưới đây là danh sách các cờ cho trong iostream.h.
Nhóm căn lề
ios::left : nếu bật thì giá trị in nằm bên trái vùng in ra (kí tự độn nằm sau).
ios::right : giá trị in nằm bên phái vùng in ra (kí tự độn nằm trước), đây là trường hợp ngầm định nếu ta không sử dụng cờ cụ thể.
ios::internal : giống cờ ios::right tuy nhiên dấu của giá trị in ra sẽ được in đầu tiên, sau đó mới đến kí tự độn và giá trị số.
Ví dụ:
int a = 12.3; b = -345.678; // độ rộng thực của a là 4, của b là 8
cout << a; // chiếm 4 cột màn hình
cout.width(10); // đặt độ rộng giá trị in tiếp theo là 10
cout.fill('*') ; // dấu * làm kí tự độn
cout.precision(2); // đặt độ chính xác đến 2 số lẻ
cout.setf(ios::left) ; // bật cờ ios::left
cout << b; // kết qủa: 12.3-345.68***
cout.setf(ios::right) ; // bật cờ ios::right
cout << b; // kết qủa: 12.3***-345.68
cout.setf(ios::internal) ; // bật cờ ios::internal
cout << b; // kết qủa: 12.3-***345.68
Nhóm định dạng số nguyên
ios::dec : in số nguyên dưới dạng thập phân (ngầm định)
ios::oct : in số nguyên dưới dạng cơ số 8
ios::hex : in số nguyên dưới dạng cơ số 16
Nhóm định dạng số thực
ios::fixed : in số thực dạng dấu phảy tĩnh (ngầm định)
ios::scientific : in số thực dạng dấu phảy động
ios::showpoint : in đủ n chữ số lẻ của phần thập phân, nếu tắt (ngầm định) thì không in các số 0 cuối của phần thập phân.
Ví dụ: giả sử độ chính xác được đặt với 3 số lẻ (bởi câu lệnh cout.precision(3))
nếu fixed bật + showpoint bật :
123.2500 được in thành 123.250
123.2599 được in thành 123.260
123.2 được in thành 123.200
nếu fixed bật + showpoint tắt :
123.2500 được in thành 123.25
123.2599 được in thành 123.26
123.2 được in thành 123.2
nếu scientific bật + showpoint bật :
12.3 được in thành 1.230e+01
2.32599 được in thành 2.326e+00
324 được in thành 3.240e+02
nếu scientific bật + showpoint tắt :
12.3 được in thành 1.23e+01
2.32599 được in thành 2.326e+00
324 được in thành 3.24e+02
Nhóm định dạng hiển thị
ios::showpos : nếu tắt (ngầm định) thì không in dấu cộng (+) trước số dương. Nếu bật trước mỗi số dương sẽ in thêm dấu cộng.
ios::showbase : nếu bật sẽ in số 0 trước các số nguyên hệ 8 và in 0x trước số hệ 16. Nếu tắt (ngầm định) sẽ không in 0 và 0x.
ios::uppercase : nếu bật thì các kí tự biểu diễn số trong hệ 16 (A..F) sẽ viết hoa, nếu tắt (ngầm định) sẽ viết thường.
Chia sẻ với bạn bè của bạn: |