Chương 3: Nhập và xuất dữ liệu pptx

32 260 0
Chương 3: Nhập và xuất dữ liệu pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

CHNG3:NHPVÀXUTDLIU  §1.KHÁINIMCHUNG 1.Kháinim: Trcđâychúngtađãxétvicnhpdliutbànphím. Trongnhiutrnghpthct,đthunli,chúngtaphinhpdliu t cáctptintrênđĩa.CáchàmthvincaCchophéptruycptptinvà chialà2cpkhácnhau: cáchàmcp1làcáchàmcpthpnht,truycptrc tipđncác tptintrênđĩa.Ckhôngcungcpvùngnhđmchocáchàmnày cáchàmcp2làcáchàmtruyxuttptincaohn,dochúngđcC cungcpvùngnhđm. Đi vicáchàmcp1,tptinđcxemlàkhicácbyteliêntcdođó khimuntruycpmutincththìphitínhtoánđachcamutinvà nhvycôngvi cvtvhn.Ngoàiraphicungcpvùngnhđmcho kiuđcghinày.Đivicáchàmcphaicôngvicnhnhànghndo: trìnhbiêndchtđngcungcpvùngkíc đmchochúng cóth truy xut các mutinmàkhônggpkhókhănnhvicác hàmcp1 TrongC,cácthôngtincnthitchocáchàmxutnhpcp2đcđt trongt ptinstdio.hcòncácthôngtinvhàmnhpxutcp1thìtrong tptinio.h  2.Streamvàcáctptin:Taphiphânbithaithutnglàstreamvàfile. H thng xut nh p ca C cung cp mt không gian tng tng gia ngilptrìnhvàcácthitbđcdùng.Cptrunggiantngtngnày gilàstreamvàthitbcthlàtp tin. a.Cácstreams:Trongmáytínhtadùng2loistream:vănbnvành phân.Mtstreamvănbnlàmtlotkít đctchcthànhdòngmà midòngđcktthúcbngkítxungdòngnewline(“\n”).Khighi,mt kítchuyndòngLF(mã10)đcchuynthành2kítCR(mã13)vàLF. Khiđc2kítliêntipCRvàLFtrêntptinchchotamtkí tLF.Mt streamnhphânlàmtlotcácbyte. b. Các tp tin: Trong C, mt tp tin là mt khái nim logic mà h thng có th áp dng cho mi th t các tp tin trênđĩa chođn các terminal. Khibtđuthchinchngtrình,máytínhm3streamvăn bnđãđcđnhnghĩatrclàstdin,stdoutvàstderr.Đivihuhtcác hthng,các thitbnàylàconsole. §2.NHPXUTCHUN 27 1.Nhpxutkít,chuikít,đnhdngvàbnghi: Nhp xutcp2 (nhpxutchun)cungcp4cáchđcvàghidliukhácnhau(ngcli nhpxutcâp1chdùng1trong4cáchnày).  Trchtdliucóthđcghimilnmtkít,tngtnhcách làmviccaputchar()vàgetche()đđcdliut bànphímvàhinthlên mànhình.  Thhai,dliucóthnhpxuttheochuibngcácdùngcáchàm gets()vàputs()  Thba,dliucóthđcnhpvàxuttheokhuôndngb ngcác hàmfprintf()vàfscanf()  Tht,dliuđcđcvàghitheokhicóchiudàicđnhthng dùnglutrmnghaycutrúcbngcáchàmfread()vàfwrite().Tómli: Cáchàmdùng chungchohaikiunhphânvàvănbn fopen:dùngmtptin fclose:đóngtptin fclose:đóngttccáctptin fflush:dùnglàmschvùngđmcatptin flushall: dùnglàmschvùngđmcattctptin ferror:chobitcóli(kháckhông)haykhôngcóli(bng0)  perror:thongbáolitrênmànhình  foef:chobitcuitptinhaycha  unlinkvàremove:dùngđloitptintrênđĩa  fseek:dichuyncontrđnvtríbtkìtrêntptin  ftell:chobitvtríhinticacontr  Cáchàmnhpxutkít putcvàfputc:nhpkítvàotptin getcvàfgetc:đckítttptin  fprintf:dùngghidliuđnhdnglêntptin  fscanf:dùngđc dliuđnhdngttptin  fputs:dùngghichuilêntptin  fgets:dùngđcchuittptin Cáchàmdùngchokiuxutnhpnhphân  putw:dùngghimts nguyênhaibytelêntptin  gets:dùngđcmtsnguyênhaibytettptin  fwrite:dùngghimtmutinlêntptin  fread:dùngđcmtmutinttptin  2.D ngvănbnvàdngnhphân: Cáchkhácđphânloicác thao tác nhpxuttptinlànóđcmtheokiuvănbnhaynhphân.Đimkhác 28 bitgiahailoinàylàkítnewlinevàendofline.Đimthhaiđphân bithaikiutptinlàlàcáchlutrcácsvàođĩa.Đividngvănbn thìcács đclutrthànhchuicáckítcòndngnhphânthìcács đclunhtrongbnh,nghĩalàdùnghaibytechomtsnguyênvà4 bytechomtsfloat.  3.Nhpxut chun:Chngtrìnhdùngcáchàmnhpxutcp2thng dhiuhnnênchúngtasnghiêncutrc. a.Nhpxutkít:Đnhpkítvàotptintadùnghàm putc()hay fputc().Đđckítttptintadùnghàmgetc()hayfgetc().Chngtrình vídnàylàtolpcáckítbngcáchgõvàobànphímmilnmtkít vàghivàomt tptintrênđĩa.Chngtrìnhdùnghàmfopen()đmmt tp tin, dùng hàm putc()đghi lên tp tin,dùng kít enterđkt thúc chngtrình.  Chngtrình31 #include<stdio.h> #include<conio.h> voidmain() { FILE*fp;  charch; printf(“Nhapcackitu:“); fp=fopen(textfile,w); while((ch=getche())!=\r) putc(ch,fp); fclose(fp); } b.Mmttptin:Trckhighimttptinlênđĩataphimtptin đó đã.Đmtptin,trchttaphikhaibáomtcontrchtiFILE. FILElàmtstructurechađngcácthôngtinvcutrúccatptinvíd nhkíchthc,v trícabđmdliuhinhành.CutrúcFILEđc khaibáotrongstdio.hnêntacnincludetptinnày.Ngoàirastdio.hcòn xácđnhcáctênvàcácbinkhácđcdùngtrongchngtrìnhhngđn  cáctptin.Dovytrongchngtrìnhtacócâulnh: FILE*fp; Sauđótamtptinbnglnh:  fopen(“textfile”,”w”); Khi vit nh vy s làm cho h điu hành bit là m m t tp tin tên là textfiletrongthmchinhànhđvitlêntptinđó(nh“w”).Tacóth 29 chotênđng dnđyđnumunm tptinthmcbt kì. Hàm fopen()trvmtcontrchđncutrúcFILEchotptinvàcontrnày đcctgitrongbinfp. Chui“w”đcgilàkiu,nócónghĩalàghi lêntptin.Cáckiumtptinlà:  “r”,”rt”mđđc,tptinphicótrênđĩa  “w”,”wt”mđghi,nutrênđĩađãcótptinthìnidungbghi đè,nuchacóthìtptinđctolp  “a”,”at”mđnithêm,thôngtinđcghivàocuitptincũnu đãcótptinhaytomitptin  “r+”,’’r+t”mđvađcvàghi,tptinphicótrênđĩa  “rb”mmttptinđđctheokiunhphân.Tptinphicósn trênđĩa  “r+b”mmttptinđđctheokiunhphân.Tptinphicósn trênđĩa  “w+”,”w+t”mđvađcvàghi,nidungtptinđãcótrênđĩas bghiđèlên  “wb”mđghitheokiunhphân,nutrênđĩađãcótptinthì nidungbghiđè,nuchacóthìtptinđctolp  “a+”,”a+t” m đ đc và ni thêm, nu tp tin cha có thì nó s đctora  “ab”mđđcvànithêmtheokiunhphân,nutptinchacó thìnósđctora  c.Ghilêntptin:Khitptinđãđcm,tacóthghilêntptin t ngkítmtbngcáchdùnghàm: putc(ch,fp) Hàmputc()tngtcáchàmputch()vàputchar().Hàmputc()ghilêntp tincócutrúcFILEđcnđnhbibinfpnhnđckhimtptin. Tin trìnhghiđctinhànhchođnkhinhnenter.  d.Đóngtptin:Khikhôngđcghinatacnđóngtptin.Câulnh đóngtptinlà:  fclose(fp); Tabáochohthngbit làcnđóngtptinchbifp.  e.Đctptin:Nutacóthghilêntptinthìtacũngcóthđct tptin.Tacóvídsau: Chngtrình32 #include<stdio.h> #include<conio.h> main() { FILE*fp; 30 intch; clrscr(); fp=fopen(textfile,r); while((ch=getc(fp))!=EOF) printf(%c,ch); fclose(fp); getch(); }   f.Ktthúctptin:Skhácnhâuchyugiachngtrìnhđcvà ghilàchngtrìnhđcphiphânbi tđcđâulàkítEOF.Nókhông philàmtkítàmlàmtsnguyêndohđiuhànhgiti.Khihttp tintagpmãktthúctptinEOF(đnh nghĩatrongstdio.hbng1)và hàmfoef()chotrkháckhông.Ngitachn1làmmãktthúcvìnucha gpcuitptinthìsđcđcmtbytemàmãsnmtrong khong0255 .Nhvygiátr1khôngtrùngvibtkìkítnàonàođcđcttptin. Trongkhichngtrìnhđangđcvàhinthcáckítthìnótìmkimm giá tr1hayEOF.Khithygiátrnày,chngtrìnhsktthúc.Chúngta dùngmtbinnguyênctgimtkítđcđc,dođótacóthhiudu EOFnhlàmttrnguyêncó trlà1.Nudùngmtbinkiuchar,chúg tacóthdùngttccáckítt0 255đólàthp8.Dođónudùng binnguyên,tabođmrngchcó mtgiátr16bitlà1,đólàduEOF.  g.Sphinphckhimtptin:Haichngtrìnhtatrìnhbàytrêncó mtlitimn.Nutptinđãđcchđnhkhông mđcthìchng trình không chy. Li này có th là do tp tin cha có (khiđc) hayđĩa khôngcònđch(khighi).Dođóvnđlàphikimtraxemtptincóm đchaykhông, nutptinkhôngmđcthìhàmfopen()trvtr0(0là NULLtrongstdio.h).KhinàyCcoiđâykhôngphilàđachhpl.Nh vytavitlichngtrìnhtrênnhsau:  Chng trình33 #include<stdio.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; intch; clrscr(); if((fp=fopen(file,r))==NULL) 31 {  printf(Khongmoduoctaptin\n);  getch();  exit(1); } while((ch=getc(fp))!=EOF) printf(%c,ch); fclose(fp); }   h.Đmskít:Khnăngđcvàghitptintrêncscáckítcho phéptrinkhaimt sngdng.Chúngtaxemxétchngtrìnhđmskí tsau:  Chngtrình34 #include<stdio.h> #include<conio.h> main(intargc,char*argv) { FILE*fp; charstring[8]; intcount=0; clrscr(); if(argc!=2) {  printf(Formatc:\<tenchuongtrinh> <tentaptin>);  getch();  exit(1); } if((fp=fopen(argv[1],r))==NULL) {  printf(Khongmoduoctaptin\n);  getch();  exit(1); } while(getc(fp)!=EOF) count++; fclose(fp); printf(Taptin%sco%dkitu,argv[1],count); getch(); 32 }  i.Đmst:Tacóthsachngtrìnhtrênthànhchngtrìnhđm st.  Chngtrình35 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charch,string[81]; intcount=0; int white=1; clrscr(); if(argc!=2) {  printf(Formatc:\<Tenchuongtrinh><tentaptin>\n);  getch();  exit(1); } if((fp=fopen(argv[1],r))==NULL) {  printf(Khongmoduoctaptin\n);  getch();  exit(1); } while((ch=getc(fp))!=EOF) switch(ch)  { case:/*nucódutr ng,dòngmihaytab*/ case\t: case\n:white++;   break; default:if(white)   {   white=0;   count++;   } 33 } fclose(fp); printf(Taptin%sco%dtu,argv[1],count); getch(); return0; }  k.Vàorachui:Đchayghichuitrêntptincũngtngtnhđc hayghitngkítriêngl.Taxétm tchngtrìnhghichui  Chngtrình36 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; charstring[8]; clrscr(); if((fp=fopen(a.txt,w))==NULL) {  printf(Khongmoduoctaptin\n);  getch();  exit(1);  } while(strlen(gets(string))>0) {  fputs(string,fp);  fputs(\n,fp); } fclose(fp); } Trongchngtrìnhmichuiktthúcbngcáchgõentervàktthúc chngtrìnhbngcáchgõenterđudòngmi.Dofputs()khôngtđ ng thêmvàomãktthúcđchuyndòngminêntaphithêmvàotptinmã này.Chngtrìnhđcmtchuittptin:  Chngtrình37: #include<stdio.h> 34 #include<string.h> #include<stdlib.h> #include<conio.h> voidmain() { FILE*fp; charstring[81]; clrscr(); if((fp=fopen(a.txt,r))==NULL) {  printf(Khongmoduoctaptin\n);  getch();  exit(1); } while(fgets(string,81,fp)!=NULL) printf(%s,string); fclose(fp); getch(); }   Hàmfgets()nhn 3đis:đachniđtchui,chiudàitiđaca chui,vàcontrchtitptin. l.Vnđsangdòngmi:Trongchngtrìnhđmkíttathyskít  đmđc bao gi cũng nh hns byte cótrong tp tinnàynhnđc bnglnhdircaDOS.Khitaghimttptinvănbnvàođĩa,Ctđng ghivàođĩachai mãCRvàLFkhigpmãsangdòngmi“\n”.Ngcli khiđctptintđĩa,cácmãCRvàLFđcthpthànhmãsangdòng mi.Chngtrìnhsauminhhoathêmvkĩthut vàorachui,nidung tngtlnhtypecaDOS  Chngtrình38 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charstring[81]; clrscr(); if(argc!=2) 35 {  printf(Formatc:\<tenchuongtrinh><tentaptin>);  getch();  exit(1); } if((fp=fopen(argv[1],r))==NULL) {  printf(Khongmoduoctaptin\n);  getch();  exit(1); } while(fgets(string,81,fp)!=NULL) printf(%s,string); fclose(fp); getch(); return0; }  m.Cáctp tinchunvàmáyin:Trênđâytađãnóiđncáchthctip nhnmtcontrthamchiudnmttptintrênđĩacahàmfopen(),C đnhnghĩalitêchunc a5tptinchunnhsau:  Tên Thitb in Thitbvàochun(bànphím) out Thitbrachun(mànhình) err Thitblichun(mànhình) aux Thitbphtrchun(cngnitip) prn Thitbinchun(máyin)  Tacóthdùngcáctênnàyđtruycpđncácthitb.Chngtrìnhsau dùnghàmfgets(0vàfputs()đinnidungmttptinramáyin  Chngtrình39 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char *argv[]) { FILE*fp1,*fp2; 36 [...]... do ta ghi , trình biên d ch s thông báo l i c th trong câu “ Loi ghi file : no such file directory” §6 VÀO RA M C H TH NG 1.Các t p tin tiêu và bi n chu n: Trong cách vào ra m c h th ng, ta ph i kh i t o b m r i t d li u vào ó tr c ghi hay c Vào ra m c h th ng có l i ch l ng mã ít h n vào ra chu n và t c s nhanh h n dùng các hàm c p 1 ta ph i c n các t p tin tiêu sau: io.h ch a các prototype c a các... qu n lí theo kích th c c a nó và khi c h t s byte ã ch ra trong kích th c t p tin thì d u hi u EOF s c 40 thông báo, d u hi u ó ng v i mã 1Ah(hay 26 h 10) Khi óng t p tin v n b n, mã 1A s ct ng chèn vào cu i t p tin làm d u hi u k t thúc t p tin (t ng ng mã Ctrl Z) Do v y n u b ng cáh nào ó ta chèn mã 1A vào m t v trí gi a t p tin, thì khi m t p tin theo ki u v n b n và c n mã này ch ng trình c s ng... %s%3d%8.3f\n ,name,code,height); } fclose(fp); getch(); } §3 KI U NH PHÂN VÀ KI U V N B N 39 1 Mã sang dòng theo hai ki u: Trong d ng v n b n, m t kí t chuy n dòng t ng ng v i 2 mã CR và LF khi ghi vào t p tin trên a Ng c l i khi c, t h p CR/LF trên a t ng ng v i kí t sang dòng m i Tuy nhiên n u m t p tin theo ki u nh phân thì 2 mã CR và LF là phân bi t nhau T ós kí t mà ch ng trình m c khác v i tr ng h... t p tin _open m t p tin ã t n t i close và _close óng t p tin chmod thay i thu c tính c a t p tin _chmode thay i thu c tính c a t p tin theo ki u DOS 51 perror thông báo l i (stdlib.h) write ghi m t dãy các byte read c m t dãy các byte lseek dùng di chuy n con tr v trí 3 c t p tin theo cách vào ra h th ng: Ta có ch ng trình a và hi n th lên màn hình theo cách vào ra h th ng c t p tin t Ch ng trình 3... M và c t b b t t p tin M t p tin ghi M t p tin ki u nh phân M t p tin ki u v n b n 6 Danh s c a t p tin: Trong vào ra chu n, con tr t p tin s nh n c ngay khi g i hàm fopen() còn trong nh p xu t b ng hàm c p 1 ta nh c giá tr nguyên g i là danh s c a t p tin ây là s gán cho m t t p tin c th tham chi u n t p tin này N u hàm open() cho ta giá tr 1 ngh a là danh s không úng và phát sinh l i c t p tin vào... ng 52 #define BUFFSIZE 512 char buff[BUFFSIZE] Nh ó ta c c d li u t a vào b m nên ch n là b i s c a 512 m buff V i DOS, kích th cb 5 M m t t p tin: C ng gi ng nh vào ra b ng hàm c p 2 , ta ph i m t p tin tr c khi c hay ghi b ng phát bi u: inhandle=open(argv[1],O_RDONLY | O_BINARY); Bi u th c này thi t l p s liên l c gi a t p tin và h i u hành Trong bi u th c ta c n m t h ng lag oflag là d u hi u cho... i ch b i ptr và f\dài c a ph n c n tìm trong b m là buflen Ch ng trình s truy n argv[2] cho cau Hàm này cho giá tr NULL khi không tìm th y kí t c n tìm Ng c l i nó s cho a ch c a kí t ã tìm th y trong b m Vi c so sánh các chu i cau và chu i ptr c ti n hành nh hàm memcmp trong câu l nh: if ((memcmp(ptr,cau,strlen(cau))==0) Hàm này c ng có 3 i s là: chu i thu nh t ptr, chu i thu hai cau và o dai can... ghi lên t p tin S_IREAD : ch cho phép c t t p tin S_IWRITE | S_IREAD : cho phép c và ghi lên t p tin dùng các tr này ph i khai báo #include sau khai báo #include Hàm write() có i t ng t nh read() Trong vòng l p while hàm read() báo s byte c c qua bi n bytes và hàm write() s bi t 57 s bytes c n ghi vào t p tin ích Trong ch ng trình ta dùng b kích th c khá l n ch ng trình ch y nhanh... t t p tin c th tham chi u n t p tin này N u hàm open() cho ta giá tr 1 ngh a là danh s không úng và phát sinh l i c t p tin vào b m: c t p tin vào b m ta dùng l nh: byte = read(inhandle , buff , BUFSIZE); Hàm này có 3 i s : danh s c a t p tin, a ch c a b m và s byte c c i c n c Giá tr c a hàm read() ch ra s byte ã c c 7 8 óng t p tin: óng t p tin ta dùng l nh close(inhandle); 9 Thông báo l i: Khi hàm... ki u v n b n và c n mã này ch ng trình c s ng ng h n vì chính lúc ó hàm c phát sinh giá tr 1 báo cho ch ng trình là ã k t thúc t p tin N u ã l u s vào t p tin theo d ng nh phân thì khi m t p tin c n ph i m theo d ng nh phân N u không s có m t s nào ó là 1A và vi c c t p tin theo ki u v n b n s k t thúc ngoài ý nh T ng t , v i t p tin m theo ki u nh phân mã 10 không c nhìn nh n là mã sang dòng m i vì . tinnàynhnđc bnglnhdircaDOS.Khitaghimttptinvănbnvàođĩa,Ctđng ghivàođĩachai mãCR và LFkhigpmãsangdòngmi“ ”.Ngcli khiđctptintđĩa,cácmãCR và LFđcthpthànhmãsangdòng mi.Chngtrìnhsauminhhoathêmvkĩthut vàorachui,nidung tngtlnhtypecaDOS  Chngtrình38 #include<stdio.h> #include<stdlib.h> #include<conio.h> main(intargc,char*argv[]) { FILE*fp; charstring[81]; clrscr(); if(argc!=2) . Trchtdliucóthđcghimilnmtkít,tngtnhcách làmviccaputchar() và getche()đđcdliut bànphím và hinthlên mànhình.  Thhai,dliucóthnhpxuttheochuibngcácdùngcáchàm gets() và puts()  Thba,dliucóthđcnhp và xuttheokhuôndngb ngcác hàmfprintf() và fscanf() . Thba,dliucóthđcnhp và xuttheokhuôndngb ngcác hàmfprintf() và fscanf()  Tht,dliuđcđc và ghitheokhicóchiudàicđnhthng dùnglutrmnghaycutrúcbngcáchàmfread() và fwrite().Tómli: Cáchàmdùng chungchohaikiunhphân và vănbn fopen:dùngmtptin fclose:đóngtptin fclose:đóngttccáctptin fflush:dùnglàmschvùngđmcatptin flushall: dùnglàmschvùngđmcattctptin ferror:chobitcóli(kháckhông)haykhôngcóli(bng0) 

Ngày đăng: 31/07/2014, 11:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan