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 đủ
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:
- giao_trinh_lap_trinh_huong_doi_tuong_voi_c_phu_luc_1.pdf