Chương 7 Các dòng tập tin (Stream) Ghi dữ liệu lên tệp - Pdf 70

Ghi dữ liệu lên tệp
11.1. Lớp ofstream
Để ghi dữ liệu lên tệp chúng ta sử dụng lớp ofstream. Lớp ofstream thừa kế các phương
thức của các lớp ios và ostream. Nó cũng thừa kế phương thức:
close
của lớp fstreambase. Ngoài ra lớp ofstream có thêm các hàm tạo và các phương thức sau:
1. Hàm tạo:
ofstream() ; // Không đối
dùng để tạo một đối tượng ofstream (dòng xuất), chưa gắn với tệp.
2. Hàm tạo:
ofstream(const char *fn, int mode = ios::out,
int prot = filebuf::openprot);dùng để tạo một đối tượng ofstream, mở tệp có
tên fn để ghi và gắn đối tượng vừa tạo với tệp được mở.
+ Tham số fn cho biết tên tệp.
+ Tham số mode có giá trị mặc định là ios::out (mở để ghi). Tham số này có thể là một hợp
của các giá trị sau:
ios::binary ghi theo kiểu nhị phân (mặc định theo kiểu văn bản)
ios::out ghi tệp, nếu tệp đã có thì nó bị xoá
ios::app ghi bổ sung vào cuối tệp
ios::ate chuyển con trỏ tệp tới cuối tệp sau khi mở tệp
ios::trunc xoá nội dung của tệp nếu nó tồn tại
ios::nocreate nếu tệp chưa có thì không làm gì (bỏ qua)
ios::noreplace nếu tệp đã có thì không làm gì (bỏ qua)
+ Tham số thứ ba prot quy định cấp bảo vệ của dòng tin, tham số này có thể bỏ qua vì nó đã
được gán một giá trị mặc định.
3. Hàm tạo:
ofstream(int fd);
dùng để tạo một đối tượng ofstream và gắn nó với một tệp có chỉ số fd đang mở.
(Để mở và lấy chỉ số (số hiệu) tệp có thể dùng hàm _open, xem cuốn Kỹ thuật Lập trình C
của tác giả).
4. Hàm tạo:

ghi tệp thứ 2 (dùng hàm tạo 1 và phương thức open)
Một điều đáng nói ở đây là việc nhập một chuỗi ký tự (như họ tên và tên tỉnh) bằng các
phương thức get hoặc getline chưa được thuận tiện, vì 2 lý do sau: thứ nhất là các phương thức
này có thể bị ký tự chuyển dòng (còn sót trên cin) làm trôi. Thứ hai là các phương thức này có
thể để lại một số ký tự trên dòng cin (nếu số ký tự gõ nhiều hơn so với quy định) và các ký tự
này sẽ gây ảnh hưởng đến các phép nhập tiếp theo. Để khắc phục các nhược điểm trên, chúng
ta đưa vào 2 chương trình trên hàm getstr để nhập chuỗi ký tự từ bàn phím.
//CT7_10.CPP
// Ghi Tep
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
void getstr(char *str,int n)
{
char tg[21];
while(1) // Bỏ qua Enter và nhập tối đa n-1 ký tự
{
cin.get(str,n);
402
if (str[0])
break;
else
cin.ignore();
}
while(1) // Loại các ký tự còn lại ra khỏi dòng nhập cin
{
cin.get(tg,20);

{
cout << "\n So thi sinh: " ;
cin >> sots ;
int n=sots;
ts = new TSINH[n+1];
for (int i=1; i<=n; ++i)
{
cout << "\n Nhap thi sinh thu: " << i << endl;
cout << "Ho ten: " ;
getstr(ts[i].ht,25);
cout << "Tinh hoac thanh pho: " ;
getstr(ts[i].ttinh,21);
cout << "So bao danh: " ;
cin >> ts[i].sobd ;
cout << "Cac 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 TS::sapxep()
{
int n = sots;
for (int i=1; i< n; ++i)
for (int j=i+1; j<= n; ++j)
if (ts[i].td < ts[j].td)
{
TSINH tg = ts[i];
ts[i] = ts[j];
ts[j] = tg;
}

//CT7_11.CPP
// Ghi Tep
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
void getstr(char *str,int n)
{
char tg[21];
while(1)
{
cin.get(str,n);
if (str[0])
break;
else
cin.ignore();
406


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status