Xuất ra máy inTrong số 4 dòng tin chuẩn không dòng nào gắn với máy in.. Như vậy không thể dùng các dòng này để xuất dữ liệu ra máy in.. Để xuất dữ liệu ra máy in cũng như nhập, xuất trên
Trang 1Xuất ra máy in
Trong số 4 dòng tin chuẩn không dòng nào gắn với máy in Như vậy không thể dùng các dòng này để xuất dữ liệu ra máy in Để xuất dữ liệu ra máy in (cũng như nhập, xuất trên tệp) cần tạo ra các dòng tin mới và cho nó gắn với thiết bị cụ thể C++ cung cấp 3 lớp stream để làm điều này, đó là các lớp:
ifstream dùng để tạo dòng nhập
ofstream dùng để tạo dòng xuất
fstream dùng để tạo dòng nhập, dòng xuất hoặc dòng nhập-xuất
Mỗi lớp có 4 hàm tạo dùng để khai báo các dòng tin (đối tượng dòng tin) Trong mục sau sẽ nói thêm về các hàm tạo này
Để tạo một dòng xuất và gắn nó với máy in ta có thể dùng một trong các hàm tạo sau: ofstream Tên_dòng_tin(int fd) ;
ofstream Tên_dòng_tin(int fd, char *buf, int n) ;
Trong đó:
+ Tên_dòng_tin là tên biến đối tượng kiểu ofstream hay gọi là tên dòng xuất do chúng ta tự đặt
+ fd (file descriptor) là chỉ số tập tin Chỉ số tập tin định sẵn đối với stdprn (máy in chuẩn)
là 4
+ Các tham số buf và n xác định một vùng nhớ n byte do buf trỏ tới Vùng nhớ sẽ được dùng làm bộ đệm cho dòng xuất
Ví dụ 1 câu lệnh:
ofstream prn(4) ;
sẽ tạo dòng tin xuất prn và gắn nó với máy in chuẩn Dòng prn sẽ có bộ đệm mặc định Dữ liệu trước hết chuyển vào bộ đệm, khi đầy bộ đệm thì dữ liệu sẽ được đẩy từ bộ đệm ra dòng prn Để chủ động yêu cầu đẩy dữ liệu từ bộ đệm ra dòng prn có thể sử dụng phương thức flush hoặc bộ phận định dạng flush Cách viết như sau:
prn.flush(); // Phương thức
prn << flush ; // Bộ phận định dạng
Các câu lệnh sau sẽ xuất dữ liệu ra prn (máy in) và ý nghĩa của chúng như sau:
prn << “\nTong = “ << (4+9) ; // Đưa một dòng vào bộ đệm
prn << “\nTich =“ << (4*9); // Đưa tiếp dòng thứ 2 vào bộ đệm
prn.flush(); // Đẩy dữ liệu từ bộ đệm ra máy in (in 2 dòng)
Các câu lệnh dưới đây cũng xuất dữ liệu ra máy in nhưng sẽ in từng dòng một:
prn << “\nTong = “ << (4+9) << flush ; // In một dòng
prn << “\nTich = “ << (4*9) ; << flush // In dòng thứ hai
Ví dụ 2: Các câu lệnh
char buf[1000] ;
ofstream prn(4,buf,1000) ;
sẽ tạo dòng tin xuất prn và gắn nó với máy in chuẩn Dòng xuất prn sử dụng 1000 byte của
Trang 2prn << “\nTong = “ << (4+9) ; // Đưa dữ liệu vào bộ đệm prn << “\nTich = “ << (4*9) ; // Đưa dữ liệu vào bộ đệm prn.flush() ; // Xuất 2 dòng (ở bộ đệm) ra máy in
Chú ý: Trước khi kết thúc chương trình, dữ liệu từ bộ đệm sẽ được tự động đẩy ra máy in.
Chương trinh minh hoạ: Chương trình dưới đây tương tự như chương trình trong mục 7.3
(chỉ sửa đổi phương thức xuất) nhưng thay việc xuất ra màn hình bằng xuất ra máy in
//CT7_08B.CPP // Xuat ra may in // Bo phan dinh dang // Ham dinh dang
#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) 394
Trang 3ts = NULL;
} } 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() 396
Trang 4ostream prn(4);
if (sots)
{
prn << "\nDanh sach thi sinh:" ;
prn.precision(1);
prn << setiosflags(ios::left);
prn << "\n" << setw(20) <<"Ho ten" << setw(8)
<< "So BD"<< setw(10) << "Tong diem";
for (int i=1; i<=sots; ++i)
prn << "\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;
}