Nhập xuất C++ nâng cao - Pdf 41

Chương 8

Nhập/Xuất C++ nâng cao


Tạo Bộ thao tác Nhập/Xuất


Nhập/Xuất File


Nhập/Xuất File nhò phân không đònh dạng


Các hàm Nhập/Xuất nhò phân


Truy cập ngẫu nhiên


Chương 8
Nhập / Xuất C++

nâng cao
// program codes
return stream
}

manip_name
tên của bộ thao tác được tạo ra

Lưu ý : bộ thao tác trên có đối số là một tham chiếu đến stream mà nó thao tác, khi
gọi bộ này, không được kèm theo tên bộ thao tác bất kỳ một đối số nào. •
Dạng tổng quát của các
bộ thao tác nhập không có tham số
:

istream &manip_name(istream &stream)
{

// program codes
return stream
}

Chương 8
Nhập / Xuất C++

nâng cao

setup
<< 123.123456;
return 0;
}

Kết qủa chương trình
**123.1234 Ví dụ 1.2
Hai bộ thao tác atn() và note() đơn giản sau đây làm gọn hơn đoạn
chương trình in các từ hay đoạn câu hay lặp lại trong chương trình.

#include <iostream.h>
// Attention:
ostream &atn(ostream &stream)
{
stream << "Attention: ";
return stream;
}

Chương 8
Nhập / Xuất C++

nâng cao

231

cout << '\a'; // sound bell
cout << "Enter password: ";

return
stream
;
}

int main()
{
char pw[80];

do {
cin >>
getpass
>> pw;
Chương 8
Nhập / Xuất C++

nâng cao

232
} while (strcmp(pw, "password"));

cout << "Logon complete\n";

return 0;
Chương 8
Nhập / Xuất C++

nâng cao

233
II/ Nhập/Xuất File

1/ Khái niệm
Để sử dụng nhập/xuất file trong chương trình cần phải nạp file
fstream.h
. File này
đònh nghiã nhiều lớp gồm
ifstream
,
ofstream

fstream
. Ba lớp này được suy dẫn
từ hai lớp istream và ostream, và ios là lớp cơ sở của chúng. Do đó các lớp ifstream,
ofstream và fstream cũng có thể truy xuất đến tất cả các thao tác đã đònh nghóa trong
ios
.

Trong C++,

fstream
io
; // input and output stream

2/ Mở file
a/ Sau khi tạo ra một stream, có thể
mở file gắn với stream đó bằng
hàm open()
.
Hàm này là hàm thành phần của ba stream nói trên, dạng tổng quát :
void
open
(const char
*filename
, int
mode
, int
access
);
filename
tên của file cần mở, có thể đi kèm với đường dẫn.
mode
xác đònh chế độ của file được mở.
access
xác đònh cách truy cập file @ Các
giá trò nguyên của mode
, có thể là một hay nhiều giá trò (được kế thừa bởi

. Chế độ
ios::out
xác đònh
file
được mở là file xuất
.

Tuy nhiên, việc tạo ra một stream bằng các khai báo nó thuộc lớp ifstream ngầm
đònh nó là một stream nhập, cũng như khai báo stream thuộc lớp ofstream ngầm
đònh nó là một stream xuất. Trong hai trường hợp trên, không cần phải xác đònh các
giá trò ios::in và ios::out khi mở file.


Chế độ
ios::binary
làm cho
file được mở ở chế độ nhò phân
.

Theo mặc đònh, tất cả các file được mở ở chế độ văn bản (text mode). Trong chế độ
văn bản, sẽ có một số trường hợp ký tự sẽ bò chuyển đổi. Ví dụ,
ký tự tạo dòng mới
(
'\n' ) sẽ được chuyển thành chuổi liên tiếp nhau của hai
ký tự xuống dòng
(carriage
return, mã 13), và thêm một dòng (line-feed, mã 10).

Khi hoạt động
ở chế độ nhò phân, sẽ không có bất kỳ một trường hợp chuyển đổi ký tự

filebuf
là lớp cha của các
lớp stream). Trong môi trường UNIX nó có giá trò 0x644 đối với các file thông
thường.

Trong môi trường DOS/WINDOWS giá trò của đối số access qui đònh mã thuộc tính
của file, bao gồm :
Chương 8
Nhập / Xuất C++

nâng cao

235 Thuộc tính Ý nghiã
0 Archive File bình thường : ghi / đọc (mặc đònh)
1 Read only File chỉ đọc
2 Hidden File ẩn
4 System File hệ thống
8 Save Thuộc tính lưu trữ Có thể sử dụng kết hợp hai hay nhiều thuộc tính ở trên bằng phép toán OR. •

đó, cần kiểm tra lại việc mở file có thành công hay không, trước khi truy xuất nó. Ví
dụ :
if(! mystream) {
cout << "Can't open file \n";
// handle error
} b/ Dùng hàm tạo để mở file

Chương 8
Nhập / Xuất C++

nâng cao

236
Thông thường, không cần dùng hàm open() để mở file, vì các lớp
ifstream
,
ofstream

fstream

đã có sẵn các hàm tạo dùng để mở file một cách tự động.
Các
hàm tạo này có các đối số giống hệt như của hàm open(). Dạng thông thường
mở file

Ví dụ
mystream.eof()
; 4/ Truy xuất nội dung trên file
Toán tử xuất << và toán tử nhập >> được sử dụng để truy xuất nội dung trên file,
cần phải thay các stream cin và cout bằng stream liên kết với file.

Thông tin lưu trên file
có cùng đònh dạng
như khi nó được trình bày trên màn hình.
Do đó, các
file tạo ra
bằng toán tử xuất << và các
file được đọc vào
bằng toán tử
nhập >> đều là các
file văn bản có đònh dạng
. Ví dụ 2.1
Tạo một file xuất, ghi lên file, đóng file. Mở file đó như một file nhập,
đọc nội dung của file.

#include <iostream.h>
#include <fstream.h>
Chương 8
Nhập / Xuất C++
ifstream fin
("test.txt"); // open input file

if(!fin) {
cout << "Cannot open input file.\n";
return 1;
}

char str[80];
int i, j; fin >>
str >> i >> j;
cout << str << ' ' << i << ' ' << j << endl; fin.close()
;

return 0;
} Kết quả chương trình, nội dung trong file test.txt

Chương 8
Nhập / Xuất C++

return 1;
} ofstream out(argv[1])
; // output file

if(!out) {
cout << "Cannot open output file.\n";
return 1;
}

char str[80];
cout << "Write strings to disk, '$' to stop\n";

do {
cout << ": ";
cin >> str;

out << str
<< endl;
Chương 8
Nhập / Xuất C++

nâng cao

239

fout(argv[2])
; // create output file to write

if(!fout) {
cout << "Cannot open output file.\n";
return 1;
}

if(!fin) {
cout << "Cannot open input file.\n";
return 1;
}

char ch; fin.unsetf(ios::skipws)
; // do not skip spaces
Chương 8
Nhập / Xuất C++

nâng cao

240
while(!fin.eof()) {

fin >> ch

III/ Nhập/Xuất File nhò phân không đònh dạng
Việc nhập/xuất file nhò phân không đònh dạng
linh động hơn
nhập/xuất text file.
Chương 8
Nhập / Xuất C++

nâng cao

241

1/ Các hàm nhập/xuất cấp thấp

Đọc ghi từng ký tự
Dạng phổ biến của chúng : istream &get
(char
&
ch);


Hàm write() ghi một số lượng
num
các byte ở vùng đệm được trỏ bởi
buf
đến stream
tương ứng.

Nếu file được đọc hết trước khi đủ num ký tự, hàm read() hoàn tất bình thường và
vùng đệm chứa hết số ký tự của lần đọc cuối. Để biết lần cuối này có bao nhiêu ký
tự được đưa ra vùng đệm, dùng hàm gcount() có dạng

int gcount();

Hàm sẽ trả về giá trò là tổng số ký tự đọc được ở lần đọc cuối ngay trước khi hết file.

Lưu ý
: việc thiết lập chế độ
ios::binary
chỉ nhằm mục đích ngăn ngừa việc chuyển
đổi ký tự. Khi sử dụng các hàm nhập/xuất file nhò phân không đònh dạng, không cần
mở file ở chế độ
ios::binary.Ví dụ 3.1
Chương trình xuất nội dung của một file bất kỳ ra màn hình

// PR.CPP
Chương 8

if(!in) {
cout << "Cannot open file.\n";
return 1;
}
while(!in.eof()) {

in.get(ch)
;
cout << ch;
}

in.close();
return 0;
} Ví dụ 3.2
Chương trình ghi các ký tự lên một file cho đến khi người dùng nhập
vào ký tự '$' .

// WRITE.CPP
#include <iostream.h>
#include <fstream.h>
int main(
int argc, char *argv[]
)
{
char ch;

Trích đoạn Nhập/Xuất theo mảng
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