Cácbộphậnđịnhdạngvàcáchàmđịnhdạng 7.1. Cácbộphậnđịnhdạng (định nghĩa trong <iostream.h>) Cácbộphậnđịnhdạng gồm: dec // như cờ ios::dec oct // như cờ ios::oct hex // như cờ ios::hex endl // xuất ký tự ‘\n’ (chuyển dòng) flush // đẩy dữ liệu ra thiết bị xuất Chúng có tác dụng như cờ địnhdạng nhưng được viết nối đuôi trong toán tử xuất nên tiện sử dụng hơn. Ví dụ xét chương trình đơn giản sau: //CT7_08.CPP // Bophandinhdang #include <iostream.h> #include <conio.h> void main() { clrscr(); cout.setf(ios::showbase) cout << "ABC" << endl << hex << 40 << " " << 41; getch(); } Chương trình sẽ in 2 dòng sau ra màn hình: ABC 0x28 0x29 7.2. Cáchàmđịnhdạng (định nghĩa trong <iomanip.h>) Cáchàmđịnhdạng gồm: setw(int n) // như cout.width(int n) setpecision(int n) // như cout.pecision(int n) setfill(char ch) // như cout. fill(char ch) setiosflags(long l) // như cout.setf(long f) resetiosflags(long l) // như cout.unsetf(long f) Các hàmđịnhdạng có tác dụng như các phương thức địnhdạng nhưng được viết nối đuôi trong toán tử xuất nên tiện sử dụng hơn. Chú ý 1: Cáchàmđịnhdạng (cũng như cácbộphậnđịnh dạng) cần viết trong các toán tử xuất. Một hàmđịnhdạng đứng một mình như một câu lệnh sẽ không có tác dụng định dạng. Chú ý 2: Muốn sử dụng cáchàmđịnhdạng cần bổ sung vào đầu chương trình câu lệnh: #include <iomanip.h> Ví dụ có thể thay phương thức cout.setf(ios::showbase) ; trong chương trình của mục 7.1 bằng hàm cout << setiosflags(ios::showbase); (chú ý hàm phải viết trong toán tử xuất) Như vậy chương trình trong 7.1 có thể viết lại theo các phương án sau: Phương án 1: #include <iostream.h> #include <iomanip.h> #include <conio.h> void main() { clrscr(); cout << setiosflags(ios::showbase) ; cout << "ABC" << endl << hex << 40 << " " << 41; getch(); } Phương án 2: #include <iostream.h> #include <iomanip.h> #include <conio.h> void main() { clrscr(); cout << "ABC" << endl << setiosflags(ios::showbase) << hex << 40 << " " << 41; getch(); } Dưới đây là ví dụ khác về việc dùng cáchàmvàbộphậnđịnh dạng. Các câu lệnh: int i = 23; cout << i << endl << setiosflags(ios::showbase) << hex << i << dec << setfill(‘*’) << endl << setw(4) << i << setfill(‘0’) << endl << setw(5) << i ; sẽ in ra màn hình như sau: 23 0x17 **23 00023 386 7.3. Ví dụ: Chương trình dưới đây minh hoạ cách dùng cáchàmđịnhdạngvà phương thức địnhdạng để in danh sách thí sinh dưới dạng bảng với các yêu cầu sau: Số báo danh in 4 ký tự (chèn thêm số 0 vào trước ví dụ 0003), tổng điểm in với đúng một chữ số phần phân. //CT7_08.CPP // Bophandinhdang // Hamdinhdang // Co dinhdang #include <iostream.h> #include <iomanip.h> #include <conio.h> struct TS { int sobd; char ht[25]; float dt,dl,dh,td; }; class TSINH { private: TS *ts; int sots; public: TSINH() { ts=NULL; sots=0; } TSINH(int n) { ts=new TS[n+1]; sots=n; } ~TSINH() { if (sots) { sots=0; ts = NULL; } 388 } void nhap(); void sapxep(); void xuat(); } ; void TSINH::nhap() { if (sots) for (int i=1; i<=sots; ++i) { cout << "\nThi sinh "<< i << ": " ; cout << "\nSo bao danh: " ; cin >> ts[i].sobd; cin.ignore(); cout << "Ho ten: " ; cin.get(ts[i].ht,25); cout << "Diem toan, ly , hoa: " ; cin >> ts[i].dt >> ts[i].dl >> ts[i].dh; ts[i].td = ts[i].dt + ts[i].dl + ts[i].dh; } } void TSINH::sapxep() { int i,j; for (i=1; i< sots; ++i) for (j=i+1; j<= sots; ++j) if (ts[i].td < ts[j].td) { TS tg; tg=ts[i]; ts[i]=ts[j]; ts[j]=tg; } } void TSINH::xuat() { if (sots) { cout << "\nDanh sach thi sinh:" ; cout.precision(1); cout << setiosflags(ios::left); cout << "\n" << setw(20) << "Ho ten" << setw(8) << "So BD" << setw(10) << "Tong diem"; for (int i=1; i<=sots; ++i) cout << "\n" << setw(20)<<setiosflags(ios::left) << ts[i].ht << setw(4) << setfill('0') << setiosflags(ios::right) << ts[i].sobd << " " << setfill(32) << setiosflags(ios::left|ios::showpoint) << setw(10) << ts[i].td; } } void main() { int n; clrscr(); cout << "\nSo thi sinh: "; cin>>n; TSINH *t = new TSINH(n); t->nhap() ; t->sapxep(); t->xuat(); getch(); delete t; } 390 . Các bộ phận định dạng và các hàm định dạng 7.1. Các bộ phận định dạng (định nghĩa trong <iostream.h>) Các bộ phận định dạng gồm: dec. f) Các hàm định dạng có tác dụng như các phương thức định dạng nhưng được viết nối đuôi trong toán tử xuất nên tiện sử dụng hơn. Chú ý 1: Các hàm định dạng