Giáo trình Lập trình hướng đối tượng với C++ - Các kênh xuất nhập

Phô lôc 1  
C¸c kªnh xuÊt nhËp  
Giíi thiÖu chung  
1.  
Kh¸i niÖm vÒ kªnh  
1.1  
Trong c¸c ch-¬ng tr-íc, chóng ta th-êng sö dông c¸c chØ thÞ viÕt ra thiÕt bÞ ra  
chuÈn nh- :  
cout<<n;  
ChØ thÞ nµy gäi ®Õn to¸n tö “<<” vµ cung cÊp cho nã hai to¸n h¹ng, mét t-¬ng  
øng víi “kªnh xuÊt - output stream”( ë ®©y lµ cout), to¸n h¹ng thø hai lµ biÓu thøc  
mµ chóng ta muèn viÕt gi¸ trÞ cña nã (ë ®©y lµ n).  
T-¬ng tù, c¸c chØ thÞ ®äc tõ thiÕt bÞ vµo chuÈn kiÓu nh-:  
cin >> x;  
gäi tíi to¸n tö “>>” vµ cung cÊp cho nã hai to¸n h¹ng, mét lµ “kªnh nhËp-  
input stream”(ë ®©y lµ cin), cßn to¸n h¹ng thø hai lµ mét biÕn mµ ta muèn nhËp gi¸  
trÞ cho nã.  
Mét c¸ch tæng qu¸t, mét kªnh(stream) ®-îc hiÓu nh- mét kªnh truyÒn:  
nhËn th«ng tin, trong tr-êng hîp ta nãi ®Õn dßng xuÊt  
cung cÊp th«ng tin, trong tr-êng hîp ta nãi ®Õn dßng nhËp.  
(i)  
(ii)  
C¸c to¸n tö “<<” vµ “>>” ë ®©y ®ãng vai trß chuyÓn giao th«ng tin, cïng víi  
khu«n d¹ng cña chóng.  
Mét kªnh cã thÓ ®-îc nèi víi mét thiÕt bÞ ngo¹i vi hoÆc mét tËp tin. Kªnh  
cout ®-îc ®Þnh nghÜa nèi ®Õn thiÕt bÞ ra chuÈn (t-¬ng ®-¬ng stdout). Còng vËy,  
kªnh cin ®-îc ®Þnh nghÜa tr-íc ®Ó nèi ®Õn thiÕt bÞ vµo chuÈn(stdin). Th«ng  
th-êng cout t-¬ng øng víi mµn h×nh, cßn cin th× ®¹i diÖn cho bµn phÝm. Tuy  
nhiªn trong tr-êng hîp cÇn thiÕt th× cã thÓ ®æi h-íng c¸c vµo ra chuÈn nµy ®Õn mét  
tËp tin.  
Ngoµi c¸c kªnh chuÈn cin vµ cout, ng-êi sö dông cã thÓ ®Þnh nghÜa cho m×nh  
c¸c kªnh xuÊt nhËp kh¸c ®Ó kÕt nèi víi c¸c tËp tin.  
Th- viÖn c¸c líp vµo ra  
1.2  
C++ cung cÊp mét th- viÖn c¸c líp phôc vô cho c«ng viÖc vµo ra. Líp  
-265-  
Ng«n ng÷ C++  
streambuf lµ c¬ së cho tÊt c¶ c¸c thao t¸c vµo ra b»ng to¸n tö; nã ®Þnh nghÜa c¸c  
®Æc tr-ng c¬ b¶n cña c¸c vïng ®Öm l-u tr÷ c¸c ký tù ®Ó xuÊt hay nhËp. Líp ios lµ  
líp dÉn xuÊt tõ streambuf, ios ®Þnh nghÜa c¸c d¹ng c¬ b¶n vµ kh¶ n¨ng kiÓm tra  
lçi dïng cho streambuf. ios lµ mét líp c¬ së ¶o cho c¸c líp istream vµ ostream.  
Mçi líp nµy cã ®Þnh nghÜa chång to¸n tö “<<” vµ “>>” cho c¸c kiÓu d÷ liÖu c¬ së  
kh¸c nhau. §Ó sö dông c¸c kh¶ n¨ng nµy ph¶i dïng chØ thÞ #include ®èi víi tËp tin  
tiªu ®Ò iostream.h. C¬ chÕ líp cña C++ cho phÐp t¹o ra hÖ thèng giao tiÕp cã kh¶  
n¨ng më réng vµ nhÊt qu¸n. Trong ch-¬ng 4 ®· ®-a ra hai ®Þnh nghÜa chång cho  
c¸c to¸n tö vµo/ra trong C++.  
Phô lôc nµy tËp trung tr×nh bµy c¸c kh¶ n¨ng vµo ra do C++ cung cÊp, bao gåm  
c¸c néi dung sau:  
(iii) kh¶ n¨ng cña ostream, istream,  
kiÓm so¸t lçi vµo ra  
(iv)  
2. Líp ostream  
2.1 §Þnh nghÜa chång to¸n tö << trong líp ostream  
Trong líp ostream, to¸n tö “<<” ®-îc ®Þnh nghÜa cho tÊt c¶ c¸c kiÓu d÷ liÖu  
c¬ së d-íi d¹ng mét hµm to¸n tö thµnh phÇn:  
ostream &operator<<(expression)  
trong ®ã expression cã kiÓu c¬ së bÊt kú. Vai trß cña hµm to¸n tö nµy lµ  
chuyÓn gi¸ trÞ cña biÓu thøc tíi kªnh liªn quan, ®ång thêi ®Þnh d¹ng gi¸ trÞ ®ã mét  
c¸ch thÝch hîp. XÐt chØ thÞ:  
cout<<n;  
NÕu n cã gi¸ trÞ 1234, to¸n tö “<<” sÏ chuyÓn ®æi gi¸ trÞ nhÞ ph©n cña n sang  
hÖ thËp ph©n vµ chuyÓn ®Õn cout c¸c ký tù t-¬ng øng víi c¸c ch÷ sè cña sè thËp  
ph©n nhËn ®-îc (ë ®©y lµ 1, 2, 3, 4).  
Ngoµi ra, to¸n tö nµy tr¶ vÒ gi¸ trÞ lµ tham chiÕu ®Õn kªnh xuÊt ®· gäi nã, sau  
khi th«ng tin ®-îc viÕt ra. Do vËy, cho phÐp viÕt liªn tiÕp nhiÒu gi¸ trÞ lªn cïng mét  
kªnh:  
cout<<”Gia tri : <<n<<”\n”;  
2.2 Hµm put  
Hµm thµnh phÇn put trong líp ostream dïng ®Ó ®-a ra kªnh xuÊt tham sè ký  
tù. ChØ thÞ  
cout.put(c);  
-266-  
C¸c kªnh xuÊt, nhËp  
sÏ ®-a ra kªnh xuÊt cout ký tù c.  
Gi¸ trÞ tr¶ vÒ cña put lµ tham chiÕu ®Õn kªnh xuÊt ®ang sö dông. Cã thÓ ghi  
liªn tiÕp c¸c ký tù trªn cïng kªnh xuÊt nh- sau:  
cout.put(c1).put(c2).put(c3);  
ChØ trÞ trªn t-¬ng ®-¬ng víi ba chØ thÞ riªng biÖt:  
cout.put(c1);  
cout.put(c2);  
cout.put(c3);  
Hµm write  
2.3  
Hµm thµnh phÇn write cho phÐp ghi ra kªnh xuÊt mét chuçi c¸c ký tù cã  
chiÒu dµi ®· cho. VÝ dô, víi:  
char t[] = “hello”;  
chØ thÞ  
cout.write(t, 4);  
sÏ göi ®Õn cout bèn ký tù ®Çu tiªn cña x©u t lµ h e l l.  
Gièng nh- put, hµm write tr¶ vÒ gi¸ trÞ lµ tham chiÕu ®Õn chÝnh kªnh xuÊt  
võa nhËn th«ng tin. T-¬ng tù, cã thÓ gäi liªn tiÕp c¸c hµm write nh- ®èi víi hµm  
put:  
//in ra ba ký tù ®Çu tiªn cña x©u t.  
cout.write(t,1).write(t+1,1).write(t+2,1);  
Kh¶ n¨ng ®Þnh d¹ng  
2.4  
2.4.1 Chän c¬ sè thÓ hiÖn  
Khi viÕt mét gi¸ trÞ sè nguyªn, c¬ sè ngÇm ®Þnh ®Ó biÓu diÔn gi¸ trÞ lµ hÖ ®Õm  
thËp ph©n. Tuy nhiªn ta cã thÓ lùa chän c¸c c¬ sè kh¸c nhau ®Ó hiÓn thÞ gi¸ trÞ: 10  
(decimal), 16 (hexa decimal), 8 (octal). Ch-¬ng tr×nh io1.cpp sau ®©y ®-a ra mét  
vÝ dô minh ho¹:  
VÝ dô  
/*io1.cpp*/  
#include <iostream.h>  
-267-  
Ng«n ng÷ C++  
#include <conio.h>  
void main() {  
clrscr();  
int n = 12000;  
cout<<"Ngam dinh " <<n<<endl;  
cout<<"Duoi he 16 "<<hex<<n<<endl;  
cout<<"Duoi he 10 "<<dec<<n<<endl;  
cout<<"Duoi he 8 "<<oct<<n<<endl;  
cout<<"va ...  
"
<<n<<endl;  
getch();  
}
Ngam dinh 12000  
Duoi he 16 2ee0  
Duoi he 10 12000  
Duoi he 8 27340  
va ...  
27340  
C¸c ký hiÖu hex, dec, oct ®-îc gäi lµ to¸n tö ®Þnh d¹ng. §ã chÝnh lµ c¸c  
to¸n tö ®· ®-îc ®Þnh nghÜa tr-íc trong ostream. C¸c to¸n tö nµy chØ cã mét to¸n  
h¹ng lµ ®èi t-îng ostream vµ tr¶ vÒ chÝnh ®èi t-îng ®ã sau khi nã thùc hiÖn mét sè  
tho t¸c nhÊt ®Þnh. Trong vÝ dô nµy, thao t¸c ®-îc thùc hiÖn lµ thay ®æi c¬ sè hiÓn thÞ  
gi¸ trÞ vµ th«ng tin vÒ c¬ sè sÏ ®-îc ghi l¹i trong ostream cho c¸c lÇn thùc hiÖn tiÕp  
sau.  
2.4.2 §Æt ®é réng  
Líp ostream cung cÊp cho ng-êi sö dông c¸c ph-¬ng thøc hoÆc c¸c to¸n tö  
®Ó kiÓm so¸t c¸ch thøc m¸y tÝnh ®Þnh d¹ng xuÊt vµ nhËp c¸c gi¸ trÞ. §Ó x¸c ®Þnh ®é  
réng cña tr-êng ®Ó hiÖn thÞ th«ng tin ta sö dông ph-¬ng thøc width. XÐt c¸c chØ  
thÞ sau:  
int x = 10;  
cout.width(5);  
cout<<x;  
Gi¸ trÞ cña x sÏ ®-îc hiÓn thÞ s¸t lÒ ph¶i trong tr-êng víi ®é réng 5 ký tù. NÕu  
kÝch th-íc cña x lín h¬n ®é réng ®· ®Æt th× gi¸ trÞ ®· ®Þnh cña ®é réng sÏ bÞ bá qua  
vµ toµn bé gi¸ trÞ cña x sÏ ®-îc hiÓn thÞ. Gi¸ trÞ ngÇm ®Þnh cña ®é réng cho mét  
-268-  
C¸c kªnh xuÊt, nhËp  
kªnh xuÊt nhËp lµ 0, nghÜa lµ d÷ liÖu ®-îc xuÊt ra theo kÝch th-íc thùc tÕ mµ kh«ng  
®én thªm ký tù g×. Sau mçi lÇn xuÊt, ®é réng sÏ ®-îc ®Æt l¹i gi¸ trÞ lµ 0. §o¹n  
ch-¬ng tr×nh sau:  
int x = 1, y =2;  
cout.width(5);  
cout<<x<<’ ‘<<y;  
sÏ xuÊt ra gi¸ trÞ cña x trong mét tr-êng cã 5 ký tù, sau ®ã lµ mét dÊu tr¾ng vµ  
gi¸ trÞ cña y víi kÝch th-íc thùc tÕ cña nã. width còng kh«ng ph¶i lµ ph-¬ng thøc  
duy nhÊt ®-îc dïng ®Ó thay ®æi ®Æc tÝnh cña c¸c kªnh xuÊt/nhËp. XÐt c¸c chØ thÞ  
sau:  
float pi=3.1415927;  
int orig_prec = cout.precision(2);  
cout<<pi;  
cout.precision(orig_prec);  
Trong ®o¹n ch-¬ng tr×nh trªn, ph-¬ng thøc precision dïng ®Ó x¸c ®Þnh l¹i  
sè ch÷ sè sÏ ®-îc in ra sau dÊu chÊm thËp ph©n cho c¸c gi¸ trÞ thùc. Ph-¬ng thøc  
precision cã thÓ cã tham sè vµ sÏ tr¶ vÒ sè ch÷ sè thËp ph©n thùc cã ®øng sau  
dÊu chÊm. Gi¸ trÞ ngÇm ®Þnh cho precision lµ 6.  
Trong tr-êng hîp gi¸ trÞ ®Æt cho ®é réng lín h¬n chiÒu dµi cña gi¸ trÞ ®-îc  
xuÊt ra, th× dïng c¸c ký tù ®én ®Ó lÊp kho¶ng trèng. Ký tù ®én ngÇm ®Þnh lµ dÊu  
c¸ch. Tuy vËy cã thÓ sö dông ph-¬ng thøc fill ®Ó sö dông mét ký tù kh¸c dÊu  
tr¾ng. §o¹n ch-¬ng tr×nh sau:  
int x = 10;  
cout.fill(‘0’);  
cout.width(5);  
cout<<x;  
cho kÕt qu¶ nh- sau:  
00010  
Cã thÓ thay thÕ ph-¬ng thøc width trong cout, cin b»ng to¸n tö setw nh- sau:  
-269-  
Ng«n ng÷ C++  
thay v× sö dông  
cout.width(5);  
cout<<x;  
ta dïng  
cout<<setw(5)<<x;  
Líp istream  
3.  
§Þnh nghÜa chång to¸n tö “>>” trong líp istream  
3.1  
Trong líp istream, to¸n tö “>>” ®-îc ®Þnh nghÜa chång ®Ó cã thÓ lµm viÖc  
víi tÊt c¶ c¸c kiÓu d÷ liÖu c¬ së (bao gåm c¶ char *) d-íi d¹ng hµm thµnh phÇn:  
istream & opertaor >>(&base_type)  
Theo khai b¸o nµy to¸n tö “>>” cã hai to¸n h¹ng, to¸n h¹ng ®øng bªn tr¸i sÏ lµ  
®èi t-îng kiÓu istream, ®èi t-îng nµy sÏ lµ tham sè ngÇm ®Þnh cho hµm to¸n tö.  
To¸n h¹ng ®øng bªn ph¶i “>>” lµ tham chiÕu ®Õn biÕn kiÓu c¬ së sÏ nhËp gi¸ trÞ.  
Thùc hiÖn “>>” sÏ cho kÕt qu¶ lµ mét tham chiÕu ®Õn ®èi t-îng cã kiÓu istream.  
Th«ng th-êng, ®ã chÝnh lµ ®èi t-îng kªnh nhËp d÷ liÖu. Còng nh- ®èi víi cout vµ  
“<<”, to¸n tö “>>” còng cho phÐp nhËp liªn tiÕp c¸c biÕn kh¸c nhau.  
C¸c dÊu ph©n c¸ch bao gåm: ‘ ‘ ‘\t’ ‘\v’ ‘\n’ ‘\r’ ‘\f’ sÏ kh«ng  
®-îc xem xÐt khi ®äc; ch¼ng h¹n, xÐt vßng lÆp thùc hiÖn chØ thÞ ( trong ®ã c cã kiÓu  
ký tù char):  
cin >>c;  
Víi ®Çu vµo cã d¹ng  
x i  
n c  
h a o  
th× chØ cã c¸c ký tù x, i, n, c, h, a, o ®-îc ®äc.  
§Ó ®äc ®-îc c¸c ký tù tr¾ng, ph¶i sö dông hµm thµnh phÇn get trong  
istream.  
MÆt kh¸c khi ®äc mét x©u ký tù kh«ng thÓ ®äc c¸c dÊu tr¾ng trong x©u .  
Ch¼ng h¹n, víi néi dung cña dßng nhËp lµ  
-270-  
C¸c kªnh xuÊt, nhËp  
“Xin chao”  
th× chØ lÊy ®-îc phÇn ®Çu “Xin” trong x©u nµy ®Ó lµm néi dung.  
§Ó cã thÓ ®äc ®-îc c¸c x©u cã chøa dÊu ph©n c¸ch sö dông hµm thµnh phÇn  
getline ®Þnh nghÜa trong líp istream.  
3.2 Hµm thµnh phÇn get  
Hµm thµnh phÇn  
istream & get( char &);  
cho phÐp ®äc mét ký tù tõ kªnh nhËp vµ g¸n nã cho biÕn cã kiÓu ký tù (lµ tham  
sè cña hµm). Hµm nµy tr¶ vÒ gi¸ trÞ lµ mét tham chiÕu ®Õn kªnh nhËp, nªn cã thÓ  
gäi get liªn tiÕp ®Ó ®äc nhiÒu ký tù.  
Kh¸c víi to¸n tö “>>”, hµm get cã thÓ ®äc tÊt c¶ c¸c ký tù kÓ c¶ lµ c¸c dÊu  
ph©n c¸ch. B¹n ®äc cã thÓ kiÓm tra sè ký tù ®äc ®-îc nhê sö dông get ®èi víi dßng  
nhËp cã néi dung:  
x i  
n c  
hao  
Khi gÆp EOF (hÕt dßng nhËp) hµm get tr¶ vÒ gi¸ trÞ 0. XÐt ®o¹n ch-¬ng tr×nh  
sau:  
char c;  
...  
while (cin.get(c)) //chÐp l¹i dßng nhËp cin  
cout.put(c);  
// lªn dßng xuÊt cout  
// c«ng viÖc sÏ dõng khi eof v× khi ®ã (cin)=0  
Cßn mét hµm thµnh phÇn get kh¸c cña líp istream:  
int get()  
Khi gÆp dÊu kÕt thóc tËp tin, hµm tr¶ vÒ gi¸ trÞ EOF cßn b×nh th-êng hµm ®-a  
l¹i ký tù ®äc ®-îc.  
-271-  
Ng«n ng÷ C++  
3.3 C¸c hµm thµnh phÇn getline vµ gcount  
Hai hµm nµy sö dông ®Ó ®äc c¸c x©u ký tù.  
Khai b¸o cña getline cã d¹ng:  
istream & getline(char * ch, int size, char delim=’\n’)  
Hµm getline ®äc c¸c ký tù trªn kªnh nhËp gäi nã vµ ®Æt vµo vïng nhí cã ®Þa  
chØ x¸c ®Þnh bëi ch. Hµm bÞ ng¾t khi:  
- ký tù ph©n c¸ch delim xuÊt hiÖn trong dßng nhËp  
- hoÆc ®· ®äc ®ñ size-1 ký tù.  
Trong c¶ hai tr-êng hîp, hµm nµy bæ sung thªm mét ký tù kÕt thóc x©u ngay  
sau c¸c ký tù ®äc ®-îc (xem l¹i hµm gets() trong stdio.h).  
Ký tù ph©n c¸ch delim cã gi¸ trÞ ngÇm ®Þnh lµ ‘\n’ khi ®äc c¸c dßng v¨n  
b¶n.  
Hµm gcount cho biÕt sè ký tù ®-îc ®äc trong chØ thÞ gäi hµm getline gÇn  
nhÊt, ë ®©y kh«ng tÝnh tíi ký tù ph©n c¸ch còng nh- ký tù cuèi x©u ®-îc thªm vµo  
tù ®éng.  
Xem c¸c chØ thÞ sau:  
const LG_LIG = 120; // chiÒu dµi cùc ®¹i cña mét dßng  
...  
char ch[LG_LIG+1]; //khai b¸o 1 dßng  
int lg;  
...  
while(cin.getline(ch,LG_LIG)) {  
lg = cin.gcount();  
//xö lý mét dßng cã lg ký tù  
}
3.4 Hµm thµnh phÇn read  
Hµm read cho phÐp ®äc tõ kªnh nhËp mét d·y ký tù cã chiÒu dµi x¸c ®Þnh.  
Ch¼ng h¹n, víi:  
char t[10];  
chØ thÞ  
-272-  
C¸c kªnh xuÊt, nhËp  
cin.read(t,5);  
sÏ ®äc tõ thiÕt bÞ vµo 5 ký tù vµ ®-a vµo 5 ký tù ®Çu tiªn cña m¶ng c¸c ký tù t.  
Hµm read kh«ng ph©n biÖt dÊu tr¾ng víi c¸c ký tù kh¸c trªn kªnh nhËp.  
3.5 Mét sè hµm kh¸c  
Hµm putback(char c) cho phÐp tr¶ l¹i kªnh nhËp mét ký tù c (tham sè cña  
hµm).  
Hµm peek() ®-a ra ký tù tiÕp theo trong dßng nhËp nh-ng kh«ng lÊy ký tù ®ã  
ra khái dßng nhËp.  
4. Tr¹ng th¸i lçi cña kªnh nhËp  
Mçi kªnh nhËp hay xuÊt ®Òu cã mét sè cê x¸c ®Þnh tr¹ng th¸i lçi cña kªnh  
hiÖn t¹i. Trong môc nµy tr-íc hÕt ta sÏ xem xÐt ý nghÜa cña c¸c cê nµy, sau ®ã sÏ  
t×m hiÓu c¸ch ®Ó lÊy gi¸ trÞ cña chóng vµ thay ®æi c¸c gi¸ trÞ cña c¸c cê theo môc  
®Ých cña chóng ta. Cuèi cïng ta xem xÐt ®Þnh nghÜa chång c¸c phÐp to¸n () vµ !  
nh»m ®¬n gi¶n ho¸ c¸ch sö dông mét kªnh d÷ liÖu.  
4.1 C¸c cê lçi  
C¸c cê lçi ®-îc ®Þnh nghÜa nh- lµ c¸c h»ng trong líp ios dÉn xuÊt tõ  
ostream vµ istream. §ã lµ:  
KÕt thóc tËp tin; cê nµy ®-îc kÝch ho¹t nÕu gÆp dÊu kÕt thóc tËp tin.  
eofbit  
Nãi c¸ch kh¸c khi kªnh nhËp kh«ng cßn ký tù ®Ó ®äc tiÕp n÷a.  
Bit nµy ®-îc bËt khi thao t¸c vµo ra tiÕp theo kh«ng thÓ tiÕn hµnh ®-îc.  
Bit nµy ®-îc bËt khi kªnh ë tr¹ng th¸i kh«ng thÓ kh«i phôc ®-îc.  
failbit  
badbit  
failbit vµ badbit chØ kh¸c nhau ®èi víi c¸c kªnh nhËp. Khi failbit  
®-îc kÝch ho¹t, c¸c th«ng tin tr-íc ®ã trong kªnh nhËp kh«ng bÞ mÊt; trong khi ®ã  
®iÒu nµy kh«ng cßn ®óng ®èi víi badbit .  
Ngoµi ra, cßn cã cê goodbit t-¬ng øng víi tr¹ng th¸i kh«ng cã lçi.  
Cã thÓ nãi r»ng mét thao t¸c vµo ra thµnh c«ng khi goodbit hay eofbit  
®-îc bËt. T-¬ng tù, thao t¸c vµo ra tiÕp theo chØ ®-îc tiÕn hµnh nÕu goodbit ®-îc  
bËt.  
Khi mét dßng ë tr¹ng th¸i lçi, mäi thao t¸c tiÕp theo ph¶i chê cho ®Õn khi:  
- tr¹ng th¸i lçi ®-îc söa ch÷a,  
- c¸c cê lçi ®-îc t¾t.  
-273-  
Ng«n ng÷ C++  
Ta sÏ xem xÐt c¸c hµm thùc hiÖn c¸c c«ng viÖc nµy trong c¸c môc d-íi ®©y.  
4.2 C¸c thao t¸c trªn c¸c bit lçi  
Cã hai lo¹i hµm thµnh phÇn thùc hiÖn c¸c thao t¸c nµy:  
C¸c hµm thµnh phÇn cho phÐp gi¸ trÞ c¸c cê lçi,  
(v)  
(vi) C¸c hµm thµnh phÇn cho phÐp bËt t¾t c¸c cê lçi ®ã.  
4.2.1 §äc gi¸ trÞ  
Trong líp ios cã ®Þnh nghÜa n¨m hµm thµnh phÇn sau ®©y:  
tr¶ vÒ 1 nÕu gÆp dÊu kÕt thóc file, cã nghÜa lµ eofbit ®-îc kÝch  
eof()  
ho¹t.  
tr¶ vÒ 1 nÕu badbit ®-îc bËt.  
bad()  
tr¶ vÒ 1 nÕu failbit ®-îc bËt.  
fail()  
tr¶ vÒ 1 nÕu ba hµm trªn cho gi¸ trÞ 0  
tr¶ vÒ mét sè nguyªn t-¬ng øng víi tÊt c¶ c¸c cê lçi.  
good()  
rdstate()  
Thay ®æi tr¹ng th¸i lçi  
4.2.2  
Trong istream/ostream cã hµm thµnh phÇn  
void clear(int i = 0)  
®Ó bËt c¸c bit lçi t-¬ng øng víi gi¸ trÞ ®-îc sö dông lµm tham sè. Th«ng  
th-êng, ta x¸c ®Þnh gi¸ trÞ ®ã dùa trªn c¸c h»ng sè cña c¸c cê lçi. Ch¼ng h¹n, nÕu  
fl biÓu thÞ mét kªnh, chØ thÞ:  
fl.clear(ios::badbit);  
sÏ bËt cê lçi badbit vµ t¾t tÊt c¶ c¸c cê cßn l¹i.  
NÕu ta muèn bËt cê nµy ®ång thêi kh«ng muèn thay ®æi gi¸ trÞ c¸c cê kh¸c, sö  
dông chØ thÞ sau:  
fl.clear(ios::badbit|fl.rdstate());  
4.3 §Þnh nghÜa c¸c to¸n tö () vµ !  
Cã thÓ kiÓm tra mét kªnh b»ng c¸ch xem nã nh- mét gi¸ trÞ logic. §iÒu nµy  
®-îc thùc hiÖn nhê viÖc ®Þnh nghÜa chång trong líp ios c¸c to¸n tö () vµ !.  
Chi tiÕt h¬n, to¸n tö () ®-îc ®Þnh nghÜa chång d-íi d¹ng (trong ®ã fl biÓu thÞ  
mét dßng):  
-274-  
C¸c kªnh xuÊt, nhËp  
(fl)  
- tr¶ vÒ mét gi¸ trÞ kh¸c 0 nÕu c¸c cê lçi ®-îc t¾t, cã nghÜa lµ hµm good() cã  
gi¸ trÞ b»ng 1.  
- tr¶ vÒ gi¸ trÞ 0 trong tr-êng hîp ng-îc l¹i, cã nghÜa lµ khi good() cã gi¸ trÞ  
0.  
Nh- vËy:  
if(fl) ...  
cã thÓ thay thÕ cho (hoÆc ®-îc thay thÕ bëi)  
if(fl.good()) ...  
Còng vËy, to¸n tö ! ®-îc ®Þnh nghÜa nh- lµ  
!fl  
- tr¶ vÒ gi¸ trÞ kh«ng nÕu cã Ýt nhÊt mét cê lçi ®-îc bËt lªn  
- tr¶ vÒ gi¸ trÞ kh¸c kh«ng trong tr-êng hîp ng-îc l¹i.  
Nh- vËy:  
if ( !fl) ...  
cã thÓ thay thÕ (hoÆc ®-îc thay thÕ bëi)  
if (!flot.good()) ...  
Qu¶n lý ®Þnh d¹ng  
5.  
C¸c kªnh xuÊt/nhËp dïng gi¸ trÞ cê ®Ó ®iÒu khiÓn d¹ng nhËp vµ xuÊt. Mét -u  
®iÓm cña ph-¬ng ph¸p qu¶n lý ®Þnh d¹ng sö dông trong C++ lµ cho phÐp ng-êi lËp  
tr×nh bá qua tÊt c¶ c¸c khÝa c¹nh ®Þnh d¹ng trong c¸c chØ thÞ ®-a ra, nÕu sö dông  
c¸c cê ngÇm ®Þnh. Bªn c¹nh ®ã, khi cã nhu cÇu, ng-êi lËp tr×nh cã thÓ ®-a ra c¸c  
®Þnh d¹ng thÝch hîp (mét lÇn cho tÊt c¶ c¸c chØ thÞ vµo/ra) víi c¸c lo¹i d÷ liÖu.  
5.1 Tr¹ng th¸i ®Þnh d¹ng cña mét dßng  
Tr¹ng th¸i ®Þnh d¹ng cña mét dßng chøa:  
- mét tõ tr¹ng th¸i, trong ®ã mçi bit cã mét ý nghÜa x¸c ®Þnh  
- c¸c gi¸ trÞ sè m« t¶ gi¸ trÞ cña c¸c h»ng sau:  
-275-  
Ng«n ng÷ C++  
Sè ký tù ®Ó ®-a th«ng tin ra. Gi¸ trÞ nµy lµ tham sè cña setw,  
mét to¸n tö ®Þnh nghÜa trong ostream/istream. Khi gi¸ trÞ  
nµy qu¸ nhá, nã sÏ kh«ng cã t¸c dông n÷a, c¸c dßng sÏ hiÓn  
thÞ th«ng tin theo ®é réng b»ng kÝch th-íc mµ d÷ liÖu cã.  
§é réng  
Sè ch÷ sè ®-îc hiÓn thÞ sau dÊu chÊm thËp ph©n trong d¹ng  
dÊu chÊm cè ®Þnh vµ còng lµ sè ký tù cã ý nghÜa trong ký ph¸p  
khoa häc.  
§é chÝnh x¸c  
NghÜa lµ c¸c ký tù ®-îc sö dông ®Ó ®iÒn thªm vµo phÇn cßn  
trèng khi gi¸ trÞ ®-a ra kh«ng ®ñ ®Ó ®iÒn hÕt ®é réng. Ký tù  
thay thÕ ngÇm ®Þnh lµ dÊu c¸ch.  
Ký tù thay  
thÕ  
5.2 Tõ tr¹ng th¸i ®Þnh d¹ng  
Tõ tr¹ng th¸i ®Þnh d¹ng ®-îc m« t¶ nh- mét sè nguyªn trong ®ã mçi bit (cê)  
t-¬ng øng víi mét h»ng sè ®Þnh nghÜa trong líp ios. Mçi cê ®Þnh d¹ng ®-îc bËt  
khi bit t-¬ng øng cã gi¸ trÞ 1, tr¸i l¹i ta nãi cê bÞ t¾t. Gi¸ trÞ cña c¸c cê cã thÓ sö  
dông ®Ó:  
- nhËn diÖn bit t-¬ng øng trong tõ ®Þnh d¹ng  
- ®Ó t¹o nªn mét tõ tr¹ng th¸i.  
C¸c tr-êng bit (Ýt nhÊt 3) ®-îc thay ®æi gi¸ trÞ mµ kh«ng cÇn cung cÊp tham sè  
cho c¸c hµm thµnh phÇn, lµ do chóng ®-îc ®Þnh nghÜa ngay bªn trong tõ tr¹ng th¸i,  
lµ ®èi t-îng gäi hµm thµnh phÇn cã t¸c dông thay ®æi néi dung c¸c cê.  
Sau ®©y lµ danh s¸ch c¸c cê kÌm theo tªn cña tr-êng bit t-¬ng øng.  
Tªn tr-êng  
Tªn bit  
ý nghÜa  
ios::skipws  
Bá qua c¸c dÊu ph©n c¸ch (khi  
nhËp)  
ios::adjustfield ios::left  
ios::right  
C¨n lÒ bªn tr¸i (xuÊt)  
C¨n lÒ bªn ph¶i (xuÊt)  
ios::internal  
C¸c ký tù ®én ®-îc ®iÒn gi÷a  
dÊu vµ gi¸ trÞ  
ios::basefield  
ios::dec  
C¬ sè hiÓn thÞ lµ c¬ sè 10  
C¬ sè hiÓn thÞ lµ c¬ sè 16  
C¬ sè hiÓn thÞ lµ c¬ sè 8  
ios::hex  
ios::oct  
ios::showbase  
-276-  
C¸c kªnh xuÊt, nhËp  
ios::showpoint  
HiÓn thÞ c¸c ch÷ sè 0 sau c¸c sè  
thËp ph©n ngay c¶ khi chóng  
kh«ng cã. NgÇm ®Þnh cê nµy  
kh«ng ®-îc bËt.  
ios::uppercase  
ios::showpos  
TÊt c¶ c¸c ch÷ sè hiÓn thÞ sÏ  
®-îc chuyÓn ®æi sang ch÷ in.  
DÊu + sÏ ®-îc xuÊt ra tr-íc bÊt  
kú sè nguyªn nµo. NgÇm ®Þnh  
cê nµy kh«ng ®-îc bËt.  
ios::scientific  
Khi ®-îc bËt, c¸c gi¸ trÞ dÊu  
phÈy ®éng sÏ ®-îc xuÊt ra theo  
d¹ng khoa häc. SÏ chØ cã mét  
con sè ®øng tr-íc dÊu chÊm  
thËp ph©n vµ c¸c con sè thËp  
ph©n cã nghÜa sÏ ®i sau nã, sau  
®ã lµ ch÷ “e” ë d¹ng ch÷ hoa  
hµy th-êng (tuú thuéc cê  
uppercase), theo sau lµ gi¸ trÞ sè  
mò.  
ios::fixed  
ios::unibuf  
Khi ®-îc bËt, gi¸ trÞ ®-îc xuÊt  
ra theo d¹ng sè thËp ph©n, cã  
c¸c ch÷ sè thËp ph©n theo sau  
dÊu chÊm thËp ph©n. NÕu kh«ng  
bËt c¶ hai cê th× d¹ng biÓu diÔn  
khoa häc sÏ dïng khi sè mò nhá  
h¬n -4 hoÆc lín h¬n gi¸ trÞ ®-îc  
m« t¶ bëi precision  
Khi ®-îc b©t, kªnh xuÊt nhËp  
®-îc thiÕt lËp l¹i sau mçi lÇn  
xuÊt ra. Cê nµy kh«ng bËt theo  
ngÇm ®Þnh.  
ios::stdio  
Cê nµy ®-îc sö dông ®Ó dän  
dÑp c¸c thiÕt bÞ xuÊt stdout  
vµ stderr.  
5.3 Thao t¸c trªn tr¹ng th¸i ®Þnh d¹ng  
§Ó t¸c ®éng lªn c¸c tr¹ng th¸i ®Þnh d¹ng, cã thÓ sö dông c¸c to¸n tö thao t¸c  
®Þnh d¹ng hoÆc sö dông c¸c hµm thµnh phÇn cña c¸c líp istream vµ ostream.  
Tuú theo tõng tr-êng hîp, c¸c thao t¸c nµy cã thÓ t¸c ®éng lªn toµn bé tõ tr¹ng  
th¸i hay chØ c¸c gi¸ trÞ: ®é réng, ®é chÝnh x¸c, ký tù ®én. Bªn c¹nh ®ã cßn cã c¸c  
hµm thµnh phÇn cho phÐp chóng ta l-u gi÷ gi¸ trÞ c¸c tr¹ng th¸i ®Þnh d¹ng ®Ó kh«i  
-277-  
Ng«n ng÷ C++  
phôc l¹i vÒ sau.  
5.3.1 C¸c to¸n tö thao t¸c ®Þnh d¹ng kh«ng tham sè (TT§DKTS)  
§©y lµ c¸c to¸n tö ®Þnh d¹ng ®-îc sö dông ë d¹ng sau (trong ®ã fl ®ãng vai  
trß mét dßng nhËp/ xuÊt, manipulator lµ to¸n tö ®Þnh d¹ng):  
fl<<manipulator  
hay  
fl>>manipulator  
KÕt qu¶ thùc hiÖn cho ta tham chiÕu ®Õn kªnh hiÖn t¹i, do vËy ®ã cho phÐp xö  
lý chóng nh- c¸ch thøc chuyÓn th«ng tin. §Æc biÖt nã cßn cho phÐp ¸p dông nhiÒu  
lÇn liªn tiÕp c¸c to¸n tö “<<” vµ “>>”.  
Sau ®©y lµ danh s¸ch c¸c to¸n tö ®Þnh d¹ng kh«ng tham sè:  
TT§DKTS Sö dông trong  
c¸c kªnh  
Ho¹t ®éng  
dec  
vµo/ra  
vµo/ra  
vµo/ra  
vµo  
KÝch ho¹t cê c¬ sè biÓu diÔn hÖ 10  
KÝch ho¹t cê c¬ sè biÓu diÔn hÖ 16  
KÝch ho¹t cê c¬ sè biÓu diÔn hÖ 8  
KÝch ho¹t cê skipws  
hex  
oct  
ws  
endl  
ends  
flush  
ra  
Thªm dÊu xuèng dßng  
ra  
Thªm ký tù kÕt thóc x©u  
ra  
Lµm rçng bé ®Öm  
5.3.2 C¸c to¸n tö ®Þnh d¹ng cã tham sè(TT§DCTS)  
C¸c to¸n tö nµy ®-îc khai b¸o trong c¸c líp ostream, istream d-íi d¹ng  
hµm thµnh phÇn:  
istream &manipulator(argument)  
hoÆc  
ostream &manipulator(argument)  
C¸c to¸n tö nµy ®-îc sö dông gièng nh- c¸c to¸n tö ®Þnh d¹ng kh«ng cã tham  
sè. Tuy nhiªn, muèn sö dông chóng ph¶i tham chiÕu tËp tin tiªu ®Ò iomaip.h b»ng  
chØ thÞ:  
#include <iomanip.h>  
-278-  
C¸c kªnh xuÊt, nhËp  
Sau ®©y lµ danh s¸ch c¸c to¸n tö ®Þnh d¹ng cã tham sè:  
TT§DCTS Sö dông cho c¸c dßng Vai trß  
setbase(int)  
vµo/ra  
vµo/ra  
vµo/ra  
vµo/ra  
vµo/ra  
vµo/ra  
§Þnh nghÜa c¬ sè hiÓn  
thÞ  
resetiosflags(long)  
setiosflags(long)  
setfill(int)  
§Æt l¹i 0 tÊt c¶ c¸c bit  
cã mÆt trong tham sè  
KÝch ho¹t c¸c bit cã  
trong tham sè  
®Þnh nghÜa l¹i ký tù  
®én  
setprecision(int)  
setw(int)  
§Þnh nghÜa ®é chÝnh  
x¸c cho c¸c sè thùc  
§Þnh nghÜa ®é réng  
C¸c hµm thµnh phÇn  
5.3.3  
Trong hai líp istream vµ ostream cã bèn hµm thµnh phÇn: setf, fill,  
precision, vµ width ®-îc m« t¶ nh- sau:  
Hµm setf  
Hµm nµy cho phÐp thay ®æi tõ tr¹ng th¸i ®Þnh d¹ng. Hµm nµy cã hai phiªn b¶n  
kh¸c nhau:  
long setf(long)  
lêi gäi tíi phiªn b¶n nµy kÝch ho¹t c¸c cê ®-îc m« t¶ trong tham sè. Gi¸ trÞ tr¶  
vÒ cña hµm lµ tr¹ng th¸i cò cña tõ tr¹ng th¸i ®Þnh d¹ng. L-u ý r»ng hµm nµy kh«ng  
t¸c ®éng ®Õn c¸c cê kh«ng ®-îc m« t¶. Nh- vËy, víi fl biÓu thÞ mét kªnh, chØ thÞ:  
fl.setf(ios::oct);  
sÏ kÝch ho¹t cê oct. Tuy nhiªn, rÊt cã thÓ c¸c cê kh¸c nh- dec hay hex vÉn  
cßn t¸c dông. D¹ng thø hai cña hµm setf hay ®-îc sö dông trong thùc tÕ lµ:  
long setf(long, long)  
Lêi gäi tíi phiªn b¶n nµy kÝch ho¹t c¸c cê m« t¶ trong tham sè thø nhÊt ë  
trong tham sè thø hai. Ch¼ng h¹n, nÕu fl lµ mét kªnh, chØ thÞ sau:  
fl.setf(ios::oct,ios::basedfield);  
sÏ kÝch ho¹t cê ios::oct vµ t¾t c¸c cê kh¸c trong ios::basefield.  
Gi¸ trÞ tr¶ vÒ cña lêi gäi nµy lµ gi¸ trÞ cò cña tham sè thø hai.  
-279-  
Ng«n ng÷ C++  
Hµm fill  
Hµm nµy cho phÐp x¸c ®Þnh vµ x¸c lËp l¹i ký tù ®én. Còng cã hai phiªn b¶n  
kh¸c nhau cho hµm nµy:  
char fill()  
Phiªn b¶n nµy tr¶ vÒ ký tù ®én hiÖn ®ang ®-îc sö dông, trong khi ®ã  
char fill(char)  
®-îc sö dông ®Ó thay ®æi ký tù ®én.  
Hµm precision  
Hµm nµy cho phÐp x¸c ®Þnh hoÆc x¸c lËp l¹i ®é chÝnh x¸c biÓu diÔn sè thùc.  
Hai phiªn b¶n kh¸c nhau cho hµm lµ:  
int precision()  
sÏ tr¶ vÒ gi¸ trÞ m« t¶ ®é chÝnh x¸c hiÖn thêi, cßn  
int precision(int)  
®Æt l¹i ®é chÝnh x¸c míi, ®ång thêi tr¶ vÒ gi¸ trÞ cò.  
Hµm width  
Hµm nµy cho phÐp x¸c ®Þnh hay x¸c lËp l¹i ®é réng cña tr-êng hiÓn thÞ th«ng  
tin. Còng cã hai phiªn b¶n kh¸c nhau:  
int width()  
sÏ tr¶ vÒ ®é réng ®ang ®-îc sö dông hiÖn t¹i, cßn  
int width(int)  
sÏ tr¶ vÒ ®é réng hiÖn thêi ®ång thêi x¸c lËp ®é réng míi lµ tham sè ®-îc m«  
t¶ trong lêi gäi hµm.  
6. Liªn kÕt kªnh xuÊt/nhËp víi mét tËp tin  
Môc nµy tr×nh bµy c¸ch ®Ó chuyÓn h-íng vµo ra tíi mét tËp tin, ®ång thêi  
còng giíi thiÖu c¸c kh¶ n¨ng truy nhËp trùc tiÕp vµo c¸c tËp tin.  
6.1 Liªn kÕt xuÊt víi mét tËp tin  
§Ó liªn kÕt mét kªnh xuÊt víi mét tËp tin, ta chØ cÇn t¹o mét ®èi t-îng kiÓu líp  
ofstream, mét líp kÕ thõa tõ ofstream. ViÖc sö dông líp nµy cÇn tíi tËp tin tiªu  
®Ò fstream.h.  
Hµm thiÕt lËp cña líp ofstream cã hai tham sè:  
- tªn cña tËp tin liªn quan(d-íi d¹ng mét x©u ký tù)  
- chÕ ®é më tËp tin ®-îc x¸c ®Þnh bëi mét sè nguyªn.  
-280-  
C¸c kªnh xuÊt, nhËp  
Líp ios cã ®Þnh nghÜa mét sè gi¸ trÞ m« t¶ c¸c chÕ ®é më tËp tin kh¸c nhau.  
ChØ thÞ sau ®©y lµ mét vÝ dô minh ho¹:  
ofstream output(“abc.txt”,ios::out);  
Khi ®ã, ®èi t-îng output sÏ ®-îc liªn kÕt víi tËp tin tªn lµ abc.txt, tËp tin  
nµy ®-îc më ë chÕ ®é ghi. Sau khi ®· t¹o ®-îc mét ®èi t-îng ofstream, viÖc ghi  
ra tËp tin ®-îc thùc hiÖn gièng nh- kÕt xuÊt ra mét kªnh xuÊt, ch¼ng h¹n:  
output<<12<<“abc”<<endl;  
Cã thÓ kiÓm tra tr¹ng th¸i lçi cña dßng xuÊt t-¬ng øng víi tËp tin gièng nh-  
c¸ch ta ®· dïng ®èi víi c¸c kªnh xuÊt chuÈn:  
if(output) ...  
Ch-¬ng tr×nh vÝ dô sau m« t¶ c¸ch thøc ghi mét sè sè nguyªn vµo mét tËp tin.  
/*io2.cpp*/  
#include <stdlib.h>  
#include <iostream.h>  
#include <fstream.h>  
#include <iomanip.h>  
#include <conio.h>  
const int LGMAX = 20;  
void main() {  
clrscr();  
char filename[LGMAX+1];  
int n;  
cout<<"Ten tap tin : ";  
cin>>setw(LGMAX)>>filename;  
ofstream output(filename,ios::out);  
if (!output) {  
cout<<"Khong the tao duoc tap tin\n";  
exit(1);  
}
do {  
cin >>n;  
-281-  
Ng«n ng÷ C++  
if (n>0) output<<n<<' ';  
}while(n>0 && (output));  
output<<endl;  
output.close();  
}
6.2  
Liªn kÕt kªnh nhËp víi mét tËp tin  
Mét ®èi t-îng cña líp ifstream sÏ ®-îc sö dông ®Ó liªn kÕt víi mét tËp tin  
chøa th«ng tin cÇn nhËp. Gièng nh- ofstream, líp ifstream còng ®-îc ®Þnh  
nghÜa trong tËp tiªu ®Ò fstream.h. Líp ifstream cã hµm thiÕt lËp víi hai tham sè  
gièng nh- ofstream. ChØ thÞ sau ®©y sÏ liªn kÕt mét ®èi t-îng ifstream víi tËp  
tin abc.txt:  
ifstream input(“abc.txt”,ios::in);  
ViÖc sö dông input ®Ó ®äc néi dung abc.txt gièng hÖt nh- viÖc sö dông cin  
®Ó ®äc d÷ liÖu tõ bµn phÝm. Ta xÐt vÝ dô sau:  
/*io3.cpp*/  
#include <stdlib.h>  
#include <iostream.h>  
#include <fstream.h>  
#include <iomanip.h>  
#include <conio.h>  
const int LGMAX = 20;  
void main() {  
clrscr();  
char filename[LGMAX+1];  
int n;  
cout<<"Ten tap tin : ";  
cin>>setw(LGMAX)>>filename;  
ifstream input(filename,ios::in);  
if (!input) {  
cout<<"Khong the mo duoc tap tin\n";  
exit(1);  
-282-  
C¸c kªnh xuÊt, nhËp  
}
while(input) {  
input>>n;  
cout<<n<<endl;  
}
input.close();  
}
NhËn xÐt  
Líp fstream (thõa kÕ tõ hai líp ifstream vµ ofstream) dïng ®Ó ®Þnh nghÜa  
c¸c kªnh d÷ liÖu thùc hiÖn ®ång thêi c¶ hai chøc n¨ng nhËp vµ xuÊt trªn mét tËp  
tin. ViÖc khai b¸o mét ®èi t-îng kiÓu fstream còng gièng nh- khai b¸o ®èi t-îng  
ofstream vµ ifstream. ChØ thÞ:  
fstream file(“abc.txt”,ios::in|ios::out);  
sÏ g¾n ®èi t-îng file víi tËp tin abc.txt, ®-îc më ®Ó ®äc vµ ghi ®ång thêi.  
C¸c kh¶ n¨ng truy nhËp trùc tiÕp  
6.3  
ViÖc truy nhËp (®äc/ghi) ®Õn tËp tin dùa trªn mét phÇn tö lµ con trá tËp tin. T¹i  
mçi thêi ®iÓm, con trá tËp tin x¸c ®Þnh mét vÞ trÝ t¹i ®ã thùc hiÖn thao t¸c truy nhËp.  
Cã thÓ xem con trá nµy nh- c¸ch ®Õm sè phim trong m¸y ¶nh. Sau mçi mét thao  
t¸c truy nhËp, con trá tËp tin tù ®éng chuyÓn sang vÞ trÝ tiÕp theo gièng nh- viÖc lªn  
phim mçi khi bÊm m¸y ¶nh. Ta gäi c¸ch truy nhËp tËp tin kiÓu nµy lµ truy nhËp  
tuÇn tù. C¸c ch-¬ng tr×nh io2.cpp, io3.cpp sö dông c¸ch truy nhËp nµy ®Ó ®äc vµ  
ghi th«ng tin trªn c¸c tËp tin. Nh-îc ®iÓm cña c¸ch truy nhËp tuÇn tù lµ ph¶i ®i tõ  
®Çu tËp tin qua c¸c tÊt c¶ c¸c phÇn tö cã trong tËp tin ®Ó ®i ®Õn ®-îc phÇn tö cÇn  
thiÕt, do vËy tèn kh«ng Ýt thêi gian. C¸ch truy nhËp trùc tiÕp sÏ cho phÐp ®Õn th¼ng  
tíi phÇn tö chóng ta cÇn nhê sö dông mét sè hµm thµnh phÇn thÝch hîp trong c¸c  
líp ifstream vµ ofstream.  
Trong líp ifstream cã hµm seekg vµ trong líp ofstream cã hµm seekp  
®-îc dïng ®Ó di chuyÓn con trá tËp tin. Mçi hµm thµnh phÇn ®ã cã hai tham sè:  
- Tham sè thø nhÊt lµ sè nguyªn m« t¶ dÞch chuyÓn (tÝnh theo byte) con trá  
bao nhiªu vÞ trÝ so víi vÞ trÝ gèc, ®-îc m« t¶ bëi tham sè thø hai (xem hai hµm  
fseek trong stdio.h).  
- Tham sè thø hai lÊy mét trong ba gi¸ trÞ sau:  
ios::beg  
ios::cur  
vÞ trÝ gèc lµ ®Çu tËp tin  
vÞ trÝ gèc lµ vÞ trÝ hiÖn thêi cña con trá tËp tin  
-283-  
Ng«n ng÷ C++  
ios::end  
vÞ trÝ gèc lµ cuèi tËp tin.  
Hai hµm tellg (®èi víi ifstream) vµ tellp (®èi víi ofstream) dïng ®Ó  
x¸c ®Þnh vÞ trÝ hiÖn thêi cña c¸c con trá tËp tin.  
Ch-¬ng tr×nh sau ®©y minh ho¹ kh¶ n¨ng truy nhËp tËp tin trùc tiÕp.  
/*io4.cpp*/  
#include <stdlib.h>  
#include <iostream.h>  
#include <fstream.h>  
#include <iomanip.h>  
#include <conio.h>  
const int LGMAX = 20;  
void main() {  
clrscr();  
char filename[LGMAX+1];  
int n,num;  
cout<<"Ten tap tin : ";  
cin>>setw(LGMAX)>>filename;  
ifstream input(filename,ios::in);  
if(!input) {  
cout<<"Khong mo duoc tap tin";  
exit(1);  
}
do {  
cout<<"So thu tu cua so nguyen se tim : ";  
cin>>num;  
if (num >0) {  
input.seekg(sizeof(int)*(num-1),ios::beg);  
input>>n;  
if (input) cout<<"--Gia tri : "<<n<<endl;  
else {  
cout<<"--Loi\n";  
input.clear();  
-284-  
Tải về để xem bản đầy đủ
pdf 24 trang Thùy Anh 26000 Free
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình hướng đối tượng với C++ - Các kênh xuất nhập", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfgiao_trinh_lap_trinh_huong_doi_tuong_voi_c_phu_luc_1.pdf