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 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 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 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 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 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 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  
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 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 ostream cã bèn hµm thµnh phÇn: setf, fill,  
precision, 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 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 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 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 26/04/2022 9220
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