Professional Documents
Culture Documents
C C DSSNG Tin (Stream) : Líp Istream
C C DSSNG Tin (Stream) : Líp Istream
C¸c dßng tin (Stream) ®îc sö dông lµm c¸c cê ®Þnh d¹ng cho viÖc nhËp xuÊt vµ c¸c cê
kiÓm tra lçi (xem bªn díi).
C ®· cung cÊp mét th viÖn c¸c hµm nhËp xuÊt nh printf, scanf,
+ C¸c ph¬ng thøc: Líp ios cung cÊp mét sè ph¬ng thøc phôc vô
gets, getch(),
364 puts, puch(), fprintf, fscanf, fopen, fwite, fread,... . C¸c 365
viÖc ®Þnh d¹ng d÷ liÖu nhËp xuÊt, kiÓm tra lçi (xem bªn díi).
hµm nµy lµm viÖc kh¸ hiÖu qu¶ nhng kh«ng thÝch øng víi c¸ch tæ
chøc ch¬ng tr×nh híng ®èi tîng. Líp istream
C++ sö dông kh¸i niÖm dßng tin (stream) vµ ®a ra c¸c líp dßng Líp nµy cung cÊp to¸n tö nhËp >> vµ nhiÒu ph¬ng thøc nhËp
tin ®Ó tæ chøc viÖc nhËp xuÊt. Dßng tin cã thÓ xem nh mét dÉy kh¸c (xem bªn díi) nh c¸c ph¬ng thøc: get, getline, read, ignore, peek,
c¸c byte. Thao t¸c nhËp lµ lÊy (®äc) c¸c byte tõ dßng tin (khi ®ã gäi seekg, tellg,...
lµ dßng nhËp - input) vµo bé nhí. Thao t¸c xuÊt lµ ®a c¸c byte tõ bé
nhí ra dßng tin (khi ®ã gäi lµ dong xuÊt - output). C¸c thao t¸c nµy Líp ostream
lµ ®éc lËp thiÕt bÞ. §Ó thùc hiÖn viÖc nhËp, xuÊt lªn mét thiÕt bÞ Líp nµy cung cÊp to¸n tö xuÊt << vµ nhiÒu ph¬ng thøc xuÊt
cô thÓ, chóng ta chØ cÇn g¾n dßng tin víi thiÕt bÞ nµy. kh¸c (xem bªn díi) nh c¸c ph¬ng thøc: put, write, flush, seekp, tellp,...
Líp iostream
§ 1. C¸c líp stream
Líp nµy thõa kÕ c¸c ph¬ng thøc nhËp xuÊt cña c¸c líp istream vµ
Cã 4 líp quan träng cÇn nhí lµ: ostream.
+ Líp c¬ së ios
+ Tõ líp ios dÉn xuÊt ®Õn 2 líp istream vµ ostream § 2. Dßng cin vµ to¸n tö nhËp
+ Hai líp istream vµ ostream l¹i dÉn xuÊt tíi líp iostream
S¬ ®å kÕ thõa gi÷a c¸c líp nh sau: Dßng cin lµ mét ®èi tîng kiÓu istream ®· ®Þnh nghÜa trong C+
+ . §ã lµ dßng vµo (input) chuÈn g¾n víi bµn phÝm (t¬ng tù nh
ios stdin cña C). C¸c thao t¸c nhËp trªn dßng cin ®ång nghÜa víi nhËp
d÷ liÖu tõ bµn phÝm.
Do cin lµ mét ®èi tîng cña líp istream nªn víi cin chung ta cã thÓ
istream ostream sö dông to¸n tö nhËp >> vµ c¸c ph¬ng thøc nhËp cña c¸c líp ios vµ
istream.
C¸ch dïng to¸n tö nhËp ®Ó ®äc d÷ liÖu tõ dßng cin nh sau:
iostream cin >> Tham_sè ;
Líp ios Trong ®ã Tham_sè cã thÓ lµ:
- BiÕn hoÆc phÇn tö m¶ng nguyªn ®Ó nhËn mét sè nguyªn
- BiÕn hoÆc phÇn tö m¶ng thùc ®Ó nhËn mét sè thùc
- BiÕn hoÆc phÇn tö m¶ng ký tù ®Ó nhËn mét ký tù float x;
- Con trá ký tù ®Ó nhËn mét dÉy c¸c ký tù kh¸c trèng cin >> n >> x >> ch >> ten >> que ;
NÕu gâ c¸c ký tù:
Chó ý: C¸c to¸n tö nhËp cã thÓ viÕt nèi ®u«i ®Ó nhËp nhiÒu 123<s>3.14<s><s>ZHONG<s>HAI<s>PHONG<Enter>
gi¸ trÞ trªn mét dßng lÖnh nh sau: (®Ó cho gän sÏ ký hiÖu <s> lµ <space>)
cin >> Tham_sè_1 >> Tham_sè_2 >> ... >> Tham_sè_k ; th× kÕt qu¶ nhËp nh sau:
C¸ch366thøc nhËp nh sau: Bá qua c¸c ký tù tr¾ng (dÊu c¸ch, dÊu n=123 367
tab, dÊu chuyÓn dßng) ®øng tríc nÕu cã vµ sau ®ã ®äc vµo c¸c ký
tù t¬ng øng víi kiÓu yªu cÇu. Cô thÓ ®èi víi tõng kiÓu nh sau: x=3.14
Khi nhËp sè nguyªn sÏ bá qua c¸c ký tù tr¾ng ®øng tríc nÕu cã, ch=’Z’
sau ®ã b¾t ®Çu nhËn c¸c ký tù biÓu thÞ sè nguyªn. ViÖc nhËp kÕt ten=”HONG”
thóc khi gÆp mét ký tù tr¾ng hoÆc mét ký tù kh«ng thÓ hiÓu lµ que = “HAI”
thµnh phÇn cña sè nguyªn. VÝ dô nÕu trªn dßng vµo (gâ tõ bµn
Con trá nhËp sÏ dõng t¹i ký tù <space> tríc tõ PHONG. C¸c ký tù
phÝm) chøa c¸c ký tù <space><space>123X2 vµ Tham_sè (bªn ph¶i
cßn l¹i sÏ ®îc nhËn trong c¸c c©u lÖnh nhËp tiÕp theo.
cin) lµ biÕn nguyªn n th× n sÏ nhËn gi¸ trÞ 123. Con trá nhËp sÏ
dõng t¹i ký tù X. VÝ dô 2: XÐt ®o¹n ch¬ng tr×nh:
PhÐp nhËp mét sè thùc còng tiÕn hµnh t¬ng tù: Bá qua c¸c int m;
kho¶ng tr¾ng ®øng tríc nÕu cã, sau ®ã b¾t ®Çu nhËn c¸c ký tù float y;
biÓu thÞ sè Thùc. ViÖc nhËp kÕt thóc khi gÆp mét ký tù tr¾ng
hoÆc mét ký tù kh«ng thÓ hiÓu lµ thµnh phÇn cña sè thùc. cin >> m >> y;
PhÐp nhËp mét ký tù còng vËy: Bá qua c¸c kho¶ng tr¾ng ®øng NÕu gâ:
tríc nÕu cã, sau ®ã nhËn mét ký tù kh¸c ký tù tr¾ng. VÝ dô nÕu gâ <s><s>456<s><s>4.5<Enter>
<space><space>XY th× ký tù X ®îc nhËn vµ con trá nhËp dõng t¹i th× kÕt qu¶ nhËp lµ:
ký tù Y.
m = 456
PhÐp nhËp mét dÉy ký tù: Bá qua c¸c kho¶ng tr¾ng ®øng tríc
y = 4.5
nÕu cã, sau ®ã b¾t ®Çu nhËn tõ mét ký tù kh¸c ký tù tr¾ng. ViÖc
nhËp kÕt thóc khi gÆp mét ký tù tr¾ng. Ký tù <Enter> vÉn cßn l¹i trªn dßng nhËp.
434 435
if (ts.ht[0]==0) break; f.seekg((stt-1)*size,ios::beg);
cout << "\nSo bao danh: "; f.read((char*)(&ts),size);
cin >> ts.sobd; cout << "\nHo ten : " << ts.ht;
cout << "\nTong diem: "; cout << "\nSo ba danh: " << ts.sobd ;
cin >> ts.td; cout << "\nTong diem: " << ts.td ;
f.write((char*)(&ts),size) ; cout << "\nCo sua khong? - C/K" ;
++stt; ch=getch();
} if (toupper(ch)=='C')
sots += stt ; {
f.close(); f.seekg(-size,ios::cur) ;
} cout << "\nHo ten: ";
void TS::xem_sua() fflush(stdin);
{ gets(ts.ht);
fstream f; int ch; cout << "\nSo bao danh: ";
cin >> ts.sobd;
f.open(ten_tep,ios::binary|ios::out|ios::in|ios::nocreate);
cout << "\nTong diem: ";
if (!f.good())
cin >> ts.td;
{
f.write((char*)(&ts),size) ;
cout << "\nDanh sach chua tao" ;
}
getch();
}
return ; f.close();
} }
cout << "\nDanh sach gom: " << sots << "thi sinh" ;
void main()
int stt;
{
while(1)
int chon;
{
clrscr();
cout << "\nCan xem-sua thi sinh thu (Bam 0 de ket thuc): " ;
TS t("TS.DL");
cin >> stt ;
while(1)
if (stt<1 || stt > sots) break;
{ {
clrscr(); private:
cout << "\n1. Tao danh sach thi sinh moi" ; // Khai b¸o c¸c thuéc tÝnh
436 cout << "\n2. Bo sung danh sach thi sinh" ; public: 437
cout << "\n3. Xem-sua danh sach thi sinh" ; friend fstream& operator<<(fstream& fs,const TS &t);
cout << "\n4. Ket thuc chuong trinh " ; friend fstream& operator>>(fstream& fs,TS &t);
chon = getch(); ...
chon = chon - 48; };
clrscr();
if (chon==1) t.tao_ds(); VÒ kiÓu ghi: Cã thÓ x©y dùng c¸c to¸n tö ®Ó thùc hiÖn c¸c
phÐp ®äc ghi theo kiÓu v¨n b¶n còng nh nhÞ ph©n.
else if(chon==2) t.bo_sung();
VÝ dô 1: Ghi theo kiÓu v¨n b¶n
else if(chon==3) t.xem_sua();
Ch¬ng tr×nh díi ®©y minh ho¹ c¸ch x©y dùng vµ sö dông c¸c
else break;
to¸n tö nhËp xuÊt ®èi tîng trªn mµn h×nh, bµn phÝm vµ tÖp. Ch-
} ¬ng tr×nh ®a vµo líp TS (ThÝ sinh) vµ c¸c hµm to¸n tö cho phÐp
clrscr(); nhËp xuÊt c¸c ®èi tîng TS trªn mµn h×nh, bµn phÝm vµ tÖp. Ch-
cout << "\n Hoan thanh"; ¬ng tr×nh gåm c¸c néi dung sau:
getch(); + T¹o tÖp TS.DL dïng ®Ó ®äc vµ ghi theo kiÓu v¨n b¶n.
} + NhËp 3 thÝ sinh tõ bµn phÝm vµ chøa vµo 3 biÕn ®èi tîng t1,
t2, t3.
+ Ghi néi dung cña 3 biÕn ®èi tîng t1, t2, t3 lªn tÖp TS.DL
§ 17. X©y dùng to¸n tö nh©p xuÊt ®èi tîng trªn
tÖp + §äc c¸c ®èi tîng tõ tÖp TS.DL vµ chøa vµo 3 biÕn t4, t5, t6
+ In c¸c biÕn ®èi tîng t4, t5, t6 ra mµn h×nh
Trong c¸c môc trªn ®· tr×nh bÇy c¸ch dïng c¸c to¸n tö nhËp >>
vµ xuÊt << ®Ó ghi d÷ liÖu kiÓu chuÈn (nguyªn, thùc, ký tù, chuçi + ChuyÓn con trá vÒ ®Çu tÖp, dïng chu tr×nh while ®Ó lÇn lît
ký tù) trªn tÖp. Môc nµy tr×nh bÇy c¸ch x©y dùng c¸c to¸n tö dïng ®äc c¸c ®èi tîng tõ tÖp vµ in ra mµn h×nh. Dïng ph¬ng thøc eof
®Ó ®äc ghi c¸c ®èi tîng cña mét líp bÊt kú do ngêi dïng ®Þnh ®Ó kiÓm tra xem ®· ®äc hÕt d÷ liÖu hay cha.
nghÜa. //CT7_17.CPP
Gi¶ sö chóng ta muèn sö dông c¸c to¸n tö nhËp xuÊt ®Ó ®äc ghi // Cac toan tu doc ghi doi tuong tren Tep
c¸c ®èi tîng cña líp TS. Khi ®ã ta ®a vµo c¸c hµm b¹n to¸n tö nhËp #include <iostream.h>
xuÊt nh sau: #include <iomanip.h>
class TS
#include <fstream.h> {
#include <conio.h> fs << t.ht << endl;
#include <stdlib.h> fs << t.td << endl;
#include <ctype.h> return fs;
class TS }
438 { istream& operator>>(istream& is,TS &t) 439
private: {
char ht[25]; cout << "\nHo ten: " ;
float td; is.get(t.ht,25);
public: cout << "Tong diem: " ;
friend ostream& operator<<(ostream& os,const TS &t); is >> t.td ;
friend istream& operator>>(istream& is,TS &t); is.ignore();
friend fstream& operator<<(fstream& fs,const TS &t);
return is;
friend fstream& operator>>(fstream& fs,TS &t);
}
};
fstream& operator>>(fstream& fs,TS &t) void main()
{ {
fs.getline(t.ht,25); clrscr();
fs >> t.td; fstream f("TS.DL",ios::out | ios::in | ios::trunc);
fs.ignore();
TS t1,t2,t3,t4,t5,t6,t;
return fs;
cin >> t1 >> t2 >> t3;
}
f << t1 << t2 <<t3;
ostream& operator<<(ostream& os,const TS &t)
{ f.seekg(0);
os << "\nHo ten: " << t.ht ; f>>t4>>t5>>t6;
os << "\nTong diem: " << t.td; cout << t4 << t5 << t6;
return os; f.seekg(0);
} while (f>>t ,!f.eof())
fstream& operator<<(fstream& fs,const TS &t) cout << t;
f.close(); };
cout << "\n Xong"; int TS::size= sizeof(TS);
getch(); fstream& operator>>(fstream& fs,TS &t)
{
}
fs.read( (char*)(&t) , t.size);
return fs;
VÝ
440dô 2 : Ghi theo kiÓu nhÞ ph©n } 441
Ch¬ng tr×nh díi ®©y còng cã c¸c chøc n¨ng nh ch¬ng tr×nh trong fstream& operator<<(fstream& fs,const TS &t)
vÝ dô 1 bªn trªn, nhng c¸ch ghi ®äc tÖp theo kiÓu nhÞ ph©n. {
//CT7_19.CPP fs.write( (char*)(&t) , t.size);
// Cac toan tu doc ghi doi tuong tren Tep return fs;
// Kieu nhi phan }
#include <iostream.h> ostream& operator<<(ostream& os,const TS &t)
#include <iomanip.h> {
#include <fstream.h> os << t.ht << endl;
#include <conio.h> os << t.td << endl;
#include <stdlib.h> return os;
#include <ctype.h> }
class TS
istream& operator>>(istream& is,TS &t)
{
{
private:
cout << "\nHo ten: " ;
char ht[25];
is.get(t.ht,25);
float td;
cout << "Tong diem: " ;
static int size;
public: is >> t.td ;
friend ostream& operator<<(ostream& os,const TS &t); is.ignore();
friend istream& operator>>(istream& is,TS &t); return is;
friend fstream& operator<<(fstream& fs,const TS &t); }
friend fstream& operator>>(fstream& fs,TS &t); void main()
{
clrscr();
fstream f("THU.DL",ios::binary | ios::out|ios::in|ios::trunc); ifstream ofstream
TS t1,t2,t3,t4,t5,t6,t;
cin >> t1 >> t2 >> t3; fstream
f << t1 << t2 <<t3;
f.seekg(0); 18.2. C¸c ph¬ng thøc cña líp ios
f>>t4>>t5>>t6; 1. int bad()
2. void clear(int=0)
442 cout << t4 << t5 << t6; 443
f.seekg(0); 3. int eof()
while( f>>t ,!f.eof() ) 4. int fail()
cout << t; 5. int fill()
f.close(); 6. int fill(char)
cout << "\n Xong"; 7. long flags()
getch(); 8. long flags(long)
} 9. int good()
10. int precision()
11. int precision(int)
§ 18. HÖ thèng c¸c líp stream
12. long setf(long)
Môc nµy hÖ thèng l¹i c¸c líp stream mµ chóng ta ®· sö dông bªn 13. long setf(long setbits, long field)
trªn ®Ó tæ chøc xuÊt nhËp trªn mµn h×nh, bµn phÝm, m¸y in vµ 14. long unsetf(long)
tÖp
15. int width()
18.1. S¬ ®å quan hÖ gi÷a c¸c líp 16. int width(int)