1. Trang chủ
  2. » Công Nghệ Thông Tin

CHƯƠNG 9 CÁC DÒNG NHẬP/XUẤT VÀ FILE potx

26 235 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 415,96 KB

Nội dung

Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ CHƯƠNG 9 CÁC DÒNG NHẬP/XUẤT VÀ FILE Nh p/xu t v i cin/coutậ ấ ớ Đ nh d ngị ạ In ra máy in Làm vi c v i Fileệ ớ Nh p/xu t nh phânậ ấ ị Trong C++ có s n m t s l p chu n ch a d li u và các ph ng th c ph cẵ ộ ố ớ ẩ ứ ữ ệ ươ ứ ụ v cho các thao tác nh p/xu t d li u c a NSD, th ng đ c g i chung là ụ ậ ấ ữ ệ ủ ườ ượ ọ stream (dòng). Trong s các l p này, l p có tên ố ớ ớ ios là l p c s , ch a các thu c tính đớ ơ ở ứ ộ ể đ nh d ng vi c nh p/xu t và ki m tra l i. M r ng (k th a) l p này có các l pị ạ ệ ậ ấ ể ỗ ở ộ ế ừ ớ ớ istream, ostream cung c p thêm các toán t nh p/xu t nh >>, << và các hàm get,ấ ử ậ ấ ư getline, read, ignore, put, write, flush … M t l p r ng h n có tên ộ ớ ộ ơ iostream là t ngổ h p c a 2 l p trên. B n l p nh p/xu t c b n này đ c khai báo trong các file tiêuợ ủ ớ ố ớ ậ ấ ơ ả ượ đ có tên t ng ng (v i đuôi *.h). S đ th a k c a 4 l p trên đ c th hi nề ươ ứ ớ ơ ồ ừ ế ủ ớ ượ ể ệ qua hình v d i đây.ẽ ướ Đ i t ng c a các l p trên đ c g i là các ố ượ ủ ớ ượ ọ dòng d li u. M t s đ i t ngữ ệ ộ ố ố ượ thu c l p ộ ớ iostream đã đ c khai báo s n (ượ ẵ chu nẩ ) và đ c g n v i nh ng thi t bượ ắ ớ ữ ế ị nh p/xu t c đ nh nh các đ i t ng ậ ấ ố ị ư ố ượ cin, cout, cerr, clog g n v i bàn phím (cin)ắ ớ và màn hình (cout, cerr, clog). Đi u này có nghĩa các toán t >>, << và các hàm kề ử ể trên khi làm vi c v i các đ i t ng này s cho phép NSD nh p d li u thông quaệ ớ ố ượ ẽ ậ ữ ệ bàn phím ho c xu t k t qu thông qua màn hình. ặ ấ ế ả Đ nh p/xu t thông qua các thi t b khác (nh máy in, file trên đĩa …), C++ể ậ ấ ế ị ư cung c p thêm các l p ấ ớ ifstream, ofstream, fstream cho phép NSD khai báo các đ iố 19 ios istream ostream iostream Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ t ng m i g n v i thi t b và t đó nh p/xu t thông qua các thi t b này.ượ ớ ắ ớ ế ị ừ ậ ấ ế ị Trong ch ng này, chúng ta s xét các đ i t ng chu n ươ ẽ ố ượ ẩ cin, cout và m t sộ ố toán t , hàm nh p xu t đ c tr ng c a l p ử ậ ấ ặ ư ủ ớ iostream cũng nh cách t o và s d ngư ạ ử ụ các đ i t ng thu c các l p ố ượ ộ ớ ifstream, ofstream, fstream đ làm vi c v i các thi tể ệ ớ ế b nh máy in và file trên đĩa.ị ư I. NH P/XU T V I CIN/COUTẬ Ấ Ớ Nh đã nh c trên, ư ắ ở cin là dòng d li u nh p (đ i t ng) thu c l p ữ ệ ậ ố ượ ộ ớ istream. Các thao tác trên đ i t ng này g m có các toán t và hàm ph c v nh p d li uố ượ ồ ử ụ ụ ậ ữ ệ vào cho bi n t bàn phím. ế ừ 1. Toán t nh p >>ử ậ Toán t này cho phép nh p d li u t m t dòng ử ậ ữ ệ ừ ộ Input_stream nào đó vào cho m t danh sách các bi n. Cú pháp chung nh sau:ộ ế ư Input_stream >> bi n1 >> bi n2 >> …ế ế trong đó Input_stream là đ i t ng thu c l p istream. Tr ng h p ố ượ ộ ớ ườ ợ Input_stream là cin, câu l nh nh p s đ c vi t:ệ ậ ẽ ượ ế cin >> bi n1 >> bi n2 >> …ế ế câu l nh này cho phép nh p d li u t bàn phím cho các bi n. Các bi n này có thệ ậ ữ ệ ừ ế ế ể thu c các ki u chu n nh : ki u nguyên, th c, ký t , xâu kí t . Chú ý 2 đ c đi mộ ể ẩ ư ể ự ự ự ặ ể quan tr ng c a câu l nh trên.ọ ủ ệ • L nh s b qua không gán các d u tr ng (d u cách <>, d u Tab, d uệ ẽ ỏ ấ ắ ấ ấ ấ xu ng dòng ố ↵ ) vào cho các bi n (k c bi n xâu kí t ).ế ể ả ế ự • Khi NSD nh p vào dãy byte nhi u h n c n thi t đ gán cho các bi n thìậ ề ơ ầ ế ể ế s byte còn l i và k c d u xu ng dòng ố ạ ể ả ấ ố ↵ s n m l i trong cin. Các byteẽ ằ ạ này s t đ ng gán cho các bi n trong l n nh p sau mà không ch NSDẽ ự ộ ế ầ ậ ờ gõ thêm d li u vào t bàn phím. Do v y câu l nhữ ệ ừ ậ ệ cin >> a >> b >> c; cũng có th đ c vi t thành ể ượ ế cin >> a; cin >> b; cin >> c; và ch c n nh p d li u vào t bàn phím m t l n chung cho c 3 l nh (m iỉ ầ ậ ữ ệ ừ ộ ầ ả ệ ỗ d li u nh p cho m i bi n ph i cách nhau ít nh t m t d u tr ng)ữ ệ ậ ỗ ế ả ấ ộ ấ ắ Ví d 1 ụ : Nh p d li u cho các bi nậ ữ ệ ế int a; 20 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ float b; char c; char *s; cin >> a >> b >> c >> s; gi s NSD nh p vào dãy d li u : <><>12<>34.517ABC<>12E<>D ả ử ậ ữ ệ ↵ khi đó các bi n s đ c nh n nh ng giá tr c th sau:ế ẽ ượ ậ ữ ị ụ ể a = 12 b = 34.517 c = 'A' s = "BC" trong cin s còn l i dãy d li u : <>12E<>D ẽ ạ ữ ệ ↵ . N u trong đo n ch ng trình ti p theo có câu l nh ế ạ ươ ế ệ cin >> s; thì s s đ c t đ ngẽ ượ ự ộ gán giá tr "12E" mà không c n NSD nh p thêm d li u vào cho cin.ị ầ ậ ữ ệ Qua ví d trên m t l n n a ta nh c l i đ c đi m c a toán t nh p >> là các bi nụ ộ ầ ữ ắ ạ ặ ể ủ ử ậ ế ch l y d li u v a đ cho ki u c a bi n (ví d bi n c ch l y m t kí t 'A', b l yỉ ấ ữ ệ ừ ủ ể ủ ế ụ ế ỉ ấ ộ ự ấ giá tr 34.517) ho c cho đ n khi g p d u tr ng đ u tiên (ví d a l y giá tr 12, sị ặ ế ặ ấ ắ ầ ụ ấ ị l y giá tr "BC" dù trong cin v n còn d li u). T đó ta th y toán t >> là khôngấ ị ẫ ữ ệ ừ ấ ử phù h p khi nh p d li u cho các xâu kí t có ch a d u cách. C++ gi i quy tợ ậ ữ ệ ự ứ ấ ả ế tr ng h p này b ng m t s hàm (ph ng th c) nh p khác thay cho toán t >>.ườ ợ ằ ộ ố ươ ứ ậ ử 2. Các hàm nh p kí t và xâu kí tậ ự ự 1. Nh p kí tậ ự • cin.get() : Hàm tr l i m t kí t (k c d u cách, d u ả ạ ộ ự ể ả ấ ấ ↵ ) Ví d :ụ char ch; ch = cin.get(); − n u nh p ABế ậ ↵, ch nh n giá tr 'A', trong cin còn Bậ ị ↵ . − n u nh p Aế ậ ↵ , ch nh n giá tr 'A', trong cin còn ậ ị ↵ . − n u nh p ế ậ ↵ , ch nh n giá tr 'ậ ị ↵ ', trong cin r ngỗ . • cin.get(ch) : Hàm nh p kí t cho ch và tr l i m t tham chi u t i cin. Doậ ự ả ạ ộ ế ớ hàm tr l i tham chi u t i cin nên có th vi t các ph ng th c nh p nàyả ạ ế ớ ể ế ươ ứ ậ liên ti p trên m t đ i t ng cin. Ví d :ế ộ ố ượ ụ char c, d; cin.get(c).get(d); n u nh p ABế ậ ↵ thì c nh n giá tr 'A' và d nh n giá tr 'B'. Trong cin còn 'Cậ ị ậ ị ↵ '. 21 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ 2. Nh p xâu kí tậ ự • cin.get(s, n, fchar) : Hàm nh p cho s dãy kí t t cin. Dãy đ c tính t kíậ ự ừ ượ ừ t đ u tiên trong cin cho đ n khi đã ự ầ ế đ n – 1 kí tủ ự ho c ặ g p kí t k t thúcặ ự ế fchar. Kí t k t thúc này đ c ng m đ nh là d u xu ng dòng n u b bự ế ượ ầ ị ấ ố ế ị ỏ qua trong danh sách đ i. T c có th vi t câu l nh trên d i d ngố ứ ể ế ệ ướ ạ cin.get(s, n) khi đó xâu s s nh n dãy kí t nh p cho đ n khi đ n-1 kí tẽ ậ ự ậ ế ủ ự ho c đ n khi NSD k t thúc nh p (b ng d u ặ ế ế ậ ằ ấ ↵ ). Chú ý : − L nh s t đ ng gán d u k t thúc xâu ('\0') vào cho xâu s sau khi nh pệ ẽ ự ộ ấ ế ậ xong. − Các l nh có th vi t n i nhau, ví d : ệ ể ế ố ụ cin.get(s1, n1).get(s2,n2); − Kí t k t thúc fchar (ho c ự ế ặ ↵ ) v n n m l i trong cin. Đi u này có th làmẫ ằ ạ ề ể trôi các l nh get() ti p theo. Ví d :ệ ế ụ struct Sinhvien { char *ht; // h tênọ char *qq; // quê quán }; void main() { int i; for (i=1; i<=3; i++) { cout << "Nhap ho ten sv thu " << i; cin.get(sv[i].ht, 25); cout << "Nhap que quan sv thu "<< i; cin.get(sv[i].qq, 30); } … } Trong đo n l nh trên sau khi nh p h tên c a sinh viên th 1, do kí t ạ ệ ậ ọ ủ ứ ự ↵ v nẫ n m trong b đ m nên khi nh p quê quán ch ng trình s l y kí t ằ ộ ệ ậ ươ ẽ ấ ự ↵ này gán cho qq, do đó quê quán c a sinh viên s là xâu r ng.ủ ẽ ỗ Đ kh c ph c tình tr ng này chúng ta có th s d ng m t trong các câu l nhể ắ ụ ạ ể ử ụ ộ ệ nh p kí t đ "nh c" d u enter còn "r i vãi" ra kh i b đ m. Có th s d ng cácậ ự ể ấ ấ ơ ỏ ộ ệ ể ử ụ câu l nh sau :ệ cin.get(); // đ c m t kí t trong b đ mọ ộ ự ộ ệ cin.ignore(n); //đ c n kí t trong b đ m (v i n=1)ọ ự ộ ệ ớ nh v y đ đo n ch ng trình trên ho t đ ng t t ta có th t ch c l i nh sau:ư ậ ể ạ ươ ạ ộ ố ể ổ ứ ạ ư 22 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ void main() { int i; for (i=1; i<=3; i++) { cout << "Nhap ho ten sv thu " << i; cin.get(sv[i].ht, 25); cin.get(); // nh c 1 kí t (enter)ấ ự cout << "Nhap que quan sv thu "<< i; cin.get(sv[i].qq, 30); cin.get() // ho c cin.ignore(1);ặ } … } • cin.getline(s, n, fchar): Ph ng th c này ho t đ ng hoàn toàn t ng tươ ứ ạ ộ ươ ự ph ng th c ươ ứ cin.get(s, n, fchar), tuy nhiên nó có th kh c ph c "l i enter"ể ắ ụ ỗ c a câu l nh trên. C th hàm sau khi gán n i dung nh p cho bi n s sủ ệ ụ ể ộ ậ ế ẽ xóa kí t enter kh i b đ m và do v y NSD không c n ph i s d ng thêmự ỏ ộ ệ ậ ầ ả ử ụ các câu l nh ph tr (cin.get(), cin.ignore(1)) đ lo i enter ra kh i bệ ụ ợ ể ạ ỏ ộ đ m. ệ • cin.ignore(n): Ph ng th c này c a đ i t ng cin dùng đ đ c và lo iươ ứ ủ ố ượ ể ọ ạ b n kí t còn trong b đ m (dòng nh p cin).ỏ ự ộ ệ ậ Chú ý: Toán t nh p ử ậ >> cũng gi ng các ph ng th c nh p kí t và xâu kí t chố ươ ứ ậ ự ự ở ỗ cũng đ l i kí t enter trong cinể ạ ự . Do v y, chúng ta nên s d ng các ph ng th cậ ử ụ ươ ứ cin.get(), cin.ignore(n) đ lo i b kí t enter tr c khi th c hi n l nh nh p kí tể ạ ỏ ự ướ ự ệ ệ ậ ự và xâu kí t khác.ự T ng t dòng nh p cin, ươ ự ậ cout là dòng d li u xu t thu c l p ữ ệ ấ ộ ớ ostream. Đi uề này có nghĩa d li u làm vi c v i các thao tác xu t (in) s đ a k t qu ra cout màữ ệ ệ ớ ấ ẽ ư ế ả đã đ c m c đ nh là màn hình. Do đó ta có th s d ng toán t xu t << và cácượ ặ ị ể ử ụ ử ấ ph ng th c xu t trong các l p ios (l p c s ) và ostream.ươ ứ ấ ớ ớ ơ ở 3. Toán t xu t <<ử ấ Toán t này cho phép xu t giá tr c a dãy các bi u th c đ n m t dòngử ấ ị ủ ể ứ ế ộ Output_stream nào đó v i cú pháp chung nh sau:ớ ư Output_stream << bt_1 << bt_2 << … đây ở Output_stream là đ i t ng thu c l p ostream. Tr ng h p ố ượ ộ ớ ườ ợ Output_stream là cout, câu l nh xu t s đ c vi t:ệ ấ ẽ ượ ế cout << bt_1 << bt_2 << … câu l nh này cho phép in k t qu c a các bi u th c ra màn hình. Ki u d li u c aệ ế ả ủ ể ứ ể ữ ệ ủ các bi u th c có th là s nguyên, th c, kí t ho c xâu kí t .ể ứ ể ố ự ự ặ ự 23 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ II. Đ NH D NGỊ Ạ Các giá tr in ra màn hình có th đ c trình bày d i nhi u d ng khác nhauị ể ượ ướ ề ạ thông qua các công c đ nh d ng nh các ph ng th c, các c và các b ph n khácụ ị ạ ư ươ ứ ờ ộ ậ đ c khai báo s n trong các l p ios và ostream. ượ ẵ ớ 1. Các ph ng th c đ nh d ngươ ứ ị ạ a. Ch đ nh đ r ng c n inỉ ị ộ ộ ầ cout.width(n) ; S c t trên màn hình đ in m t giá tr đ c ng m đ nh b ng v i đ r ngố ộ ể ộ ị ượ ầ ị ằ ớ ộ ộ th c (s ch s , ch cái và kí t khác trong giá t đ c in). Đ đ t l i đ r ngự ố ữ ố ữ ự ị ượ ể ặ ạ ộ ộ màn hình dành cho giá tr c n in (thông th ng l n h n đ r ng th c) ta có th sị ầ ườ ớ ơ ộ ộ ự ể ử d ng ph ng th c trên.ụ ươ ứ Ph ng th c này cho phép các giá tr in ra màn hình v i đ r ng n. N u n béươ ứ ị ớ ộ ộ ế h n đ r ng th c s c a giá tr thì máy s in giá tr v i s c t màn hình b ng v iơ ộ ộ ự ự ủ ị ẽ ị ớ ố ộ ằ ớ đ r ng th c. N u n l n h n đ r ng th c, máy s in giá tr căn theo l ph i, vàộ ộ ự ế ớ ơ ộ ộ ự ẽ ị ề ả đ tr ng các c t th a phía tr c giá tr đ c in. Ph ng th c này ch có tác d ngể ố ộ ừ ướ ị ượ ươ ứ ỉ ụ v i giá tr c n in ngay sau nó. Ví d :ớ ị ầ ụ int a = 12; b = 345; // đ r ng th c c a a là 2, c a b là 3ộ ộ ự ủ ủ cout << a; // chi m 2 c t màn hìnhế ộ cout.width(7); // đ t đ r ng giá tr in ti p theo là 7ặ ộ ộ ị ế cout << b; // b in trong 7 c t v i 4 d u cách đ ng tr cộ ớ ấ ứ ướ K t qu in ra s là: 12<><><><>345ế ả ẽ 2. Ch đ nh kí t chèn vào kho ng tr ng tr c giá tr c n inỉ ị ự ả ố ướ ị ầ cout.fill(ch) ; Kí t đ n ng m đ nh là d u cách, có nghĩa khi đ r ng c a giá tr c n in béự ộ ầ ị ấ ộ ộ ủ ị ầ h n đ r ng ch đ nh thì máy s đ n các d u cách vào tr c giá tr c n in cho đơ ộ ộ ỉ ị ẽ ộ ấ ướ ị ầ ủ v i đ r ng ch đ nh. Có th yêu c u đ n m t kí t ch b t kỳ thay cho d u cáchớ ộ ộ ỉ ị ể ầ ộ ộ ự ấ ấ b ng ph ng th c trên. Ví d trong dãy l nh trên, n u ta thêm dòng l nhằ ươ ứ ụ ệ ế ệ cout.fill('*') tr c khi in b ch ng h n thì k t qu in ra s là: 12****345.ướ ẳ ạ ế ả ẽ Ph ng th c này có tác d ng v i m i câu l nh in sau nó cho đ n khi g pươ ứ ụ ớ ọ ệ ế ặ m t ch đ nh m i.ộ ỉ ị ớ 3. Ch đ nh đ chính xác (s s l th p phân) c n inỉ ị ộ ố ố ẻ ậ ầ cout.precision(n) ; Ph ng th c này yêu c u các s th c in ra sau đó s có n ch s l . Các sươ ứ ầ ố ự ẽ ữ ố ẻ ố th c tr c khi in ra s đ c làm tròn đ n ch s l th n. Ch đ nh này có tácự ướ ẽ ượ ế ữ ố ẻ ứ ỉ ị d ng cho đ n khi g p m t ch đ nh m i. Ví d :ụ ế ặ ộ ỉ ị ớ ụ 24 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ int a = 12.3; b = 345.678; // đ r ng th c c a a là 4, c a b là 7ộ ộ ự ủ ủ cout << a; // chi m 4 c t màn hìnhế ộ cout.width(10); // đ t đ r ng giá tr in ti p theo là 10ặ ộ ộ ị ế cout.precision(2); // đ t đ chính xác đ n 2 s lặ ộ ế ố ẻ cout << b; // b in trong 10 c t v i 4 d u cách đ ng tr cộ ớ ấ ứ ướ K t qu in ra s là: 12.3<><><><>345.68ế ả ẽ 2. Các c đ nh d ngờ ị ạ M t s các qui đ nh v đ nh d ng th ng đ c g n li n v i các "c ". Thôngộ ố ị ề ị ạ ườ ượ ắ ề ớ ờ th ng n u đ nh d ng này đ c s d ng trong su t quá trình ch y ch ng trìnhườ ế ị ạ ượ ử ụ ố ạ ươ ho c trong m t kho ng th i gian dài tr c khi g b thì ta "b t" các c t ng ngặ ộ ả ờ ướ ỡ ỏ ậ ờ ươ ứ v i nó. Các c đ c b t s có tác d ng cho đ n khi c v i đ nh d ng khác đ cớ ờ ượ ậ ẽ ụ ế ờ ớ ị ạ ượ b t. Các c đ c cho trong file tiêu đ ậ ờ ượ ề iostream.h. Đ b t/t t các c ta s d ng các ph ng th c sau:ể ậ ắ ờ ử ụ ươ ứ cout.setf(danh sách c );ờ // B t các c trong danh sáchậ ờ cout.unsetf(danh sách c );ờ // T t các c trong danh sáchắ ờ Các c trong danh sách đ c vi t cách nhau b i phép toán h p bit (|). Ví dờ ượ ế ở ợ ụ l nh ệ cout.setf(ios::left | ios::scientific) s b t các c ẽ ậ ờ ios::left và ios::scientific. Ph ng th c ươ ứ cout.unsetf(ios::right | ios::fixed) s t t các c ẽ ắ ờ ios::right | ios::fixed. D i đây là danh sách các c cho trong iostream.h.ướ ờ a. Nhóm căn lề − ios::left : n u b t thì giá tr in n m bên trái vùng in ra (kí t đ n n mế ậ ị ằ ự ộ ằ sau). − ios::right : giá tr in n m bên phái vùng in ra (kí t đ n n m tr c), đây làị ằ ự ộ ằ ướ tr ng h p ng m đ nh n u ta không s d ng c c th .ườ ợ ầ ị ế ử ụ ờ ụ ể − ios::internal : gi ng c ố ờ ios::right tuy nhiên d u c a giá tr in ra s đ c inấ ủ ị ẽ ượ đ u tiên, sau đó m i đ n kí t đ n và giá tr s .ầ ớ ế ự ộ ị ố Ví d :ụ int a = 12.3; b = −345.678; // đ r ng th c c a a là 4, c a b là 8ộ ộ ự ủ ủ cout << a; // chi m 4 c t màn hìnhế ộ cout.width(10); // đ t đ r ng giá tr in ti p theo là 10ặ ộ ộ ị ế cout.fill('*') ; // d u * làm kí t đ nấ ự ộ cout.precision(2); // đ t đ chính xác đ n 2 s lặ ộ ế ố ẻ cout.setf(ios::left) ; // b t c ios::leftậ ờ cout << b; // k t q a: 12.3ế ủ −345.68*** 25 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ cout.setf(ios::right) ; // b t c ios::rightậ ờ cout << b; // k t q a: 12.3***ế ủ −345.68 cout.setf(ios::internal) ; // b t c ios::internalậ ờ cout << b; // k t q a: 12.3ế ủ −***345.68 2. Nhóm đ nh d ng s nguyênị ạ ố − ios::dec : in s nguyên d i d ng th p phân (ng m đ nh)ố ướ ạ ậ ầ ị − ios::oct : in s nguyên d i d ng c s 8ố ướ ạ ơ ố − ios::hex : in s nguyên d i d ng c s 16ố ướ ạ ơ ố 3. Nhóm đ nh d ng s th cị ạ ố ự − ios::fixed : in s th c d ng d u ph y tĩnh (ng m đ nh)ố ự ạ ấ ả ầ ị − ios::scientific : in s th c d ng d u ph y đ ngố ự ạ ấ ả ộ − ios::showpoint : in đ n ch s l c a ph n th p phân, n u t t (ng mủ ữ ố ẻ ủ ầ ậ ế ắ ầ đ nh) thì không in các s 0 cu i c a ph n th p phân.ị ố ố ủ ầ ậ Ví d : gi s đ chính xác đ c đ t v i 3 s l (b i câu l nhụ ả ử ộ ượ ặ ớ ố ẻ ở ệ cout.precision(3)) − n u fixed b t + showpoint b t : ế ậ ậ 123.2500 đ c in thànhượ 123.250 123.2599 đ c in thànhượ 123.260 123.2 đ c in thànhượ 123.200 − n u fixed b t + showpoint t t : ế ậ ắ 123.2500 đ c in thànhượ 123.25 123.2599 đ c in thànhượ 123.26 123.2 đ c in thànhượ 123.2 − n u scientific b t + showpoint b t : ế ậ ậ 12.3 đ c in thànhượ 1.230e+01 2.32599 đ c in thànhượ 2.326e+00 324 đ c in thànhượ 3.240e+02 − n u scientific b t + showpoint t t : ế ậ ắ 12.3 đ c in thànhượ 1.23e+01 2.32599 đ c in thànhượ 2.326e+00 324 đ c in thànhượ 3.24e+02 26 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ 4. Nhóm đ nh d ng hi n thị ạ ể ị − ios::showpos : n u t t (ng m đ nh) thì không in d u c ng (+) tr c sế ắ ầ ị ấ ộ ướ ố d ng. N u b t tr c m i s d ng s in thêm d u c ng.ươ ế ậ ướ ỗ ố ươ ẽ ấ ộ − ios::showbase : n u b t s in s 0 tr c các s nguyên h 8 và in 0xế ậ ẽ ố ướ ố ệ tr c s h 16. N u t t (ng m đ nh) s không in 0 và 0x.ướ ố ệ ế ắ ầ ị ẽ − ios::uppercase : n u b t thì các kí t bi u di n s trong h 16 (A F) sế ậ ự ể ễ ố ệ ẽ vi t hoa, n u t t (ng m đ nh) s vi t th ng.ế ế ắ ầ ị ẽ ế ườ 3. Các b và hàm đ nh d ngộ ị ạ iostream.h cũng cung c p m t s b và hàm đ nh d ng cho phép s d ngấ ộ ố ộ ị ạ ử ụ ti n l i h n so v i các c và các ph ng th c vì nó có th đ c vi t liên ti p trênệ ợ ơ ớ ờ ươ ứ ể ượ ế ế dòng l nh xu t.ệ ấ a. Các b đ nh d ngộ ị ạ dec // t ng t ios::decươ ự oct // t ng t ios::decươ ự hex // t ng t ios::hexươ ự endl // xu t kí t xu ng dòng ('\n')ấ ự ố flush // đ y toàn b d li u ra dòng xu tẩ ộ ữ ệ ấ Ví d : ụ cout.setf(ios::showbase) ; // cho phép in các kí t bi u th c sự ể ị ơ ố cout.setf(ios::uppercase) ; // d i d ng ch vi t hoaướ ạ ữ ế int a = 171; int b = 32 ; cout << hex << a << endl << b ; // in 0xAB và 0x20 2. Các hàm đ nh d ng (#include <iomanip.h>)ị ạ setw(n) // t ng t cout.width(n)ươ ự setprecision(n) // t ng t cout.precision(n)ươ ự setfill(c) // t ng t cout.fill(c)ươ ự setiosflags(l) // t ng t cout.setf(l)ươ ự resetiosflags(l) // t ng t cout.unsetf(l)ươ ự 27 Ch ng 9. Các dòng nh p/xu t và fileươ ậ ấ III. IN RA MÁY IN Nh trong ph n đ u ch ng đã trình bày, đ làm vi c v i các thi t b khácư ầ ầ ươ ể ệ ớ ế ị v i màn hình và đĩa … chúng ta c n t o ra các đ i t ng (thu c các l p ifstream,ớ ầ ạ ố ượ ộ ớ ofstream và fstream) t c các dòng tin b ng các hàm t o c a l p và g n chúng v iứ ằ ạ ủ ớ ắ ớ thi t b b ng câu l nh: ế ị ằ ệ ofstream Tên_dòng(thi t b ) ;ế ị Ví d đ t o m t đ i t ng mang tên Mayin và g n v i máy in, chúng taụ ể ạ ộ ố ượ ắ ớ dùng l nh:ệ ofstream Mayin(4) ; trong đó 4 là s hi u c a máy in.ố ệ ủ Khi đó m i câu l nh dùng toán t xu t << và cho ra Mayin s đ a d li uọ ệ ử ấ ẽ ư ữ ệ c n in vào m t b đ m m c đ nh trong b nh . N u b đ m đ y, m t s thôngầ ộ ộ ệ ặ ị ộ ớ ế ộ ệ ầ ộ ố tin đ a vào tr c s t đ ng chuy n ra máy in. Đ ch đ ng đ a t t c d li uư ướ ẽ ự ộ ể ể ủ ộ ư ấ ả ữ ệ còn l i trong b đ m ra máy in chúng ta c n s d ng b đ nh d ng flush (Mayinạ ộ ệ ầ ử ụ ộ ị ạ << flush << …) ho c ph ng th c flush (Mayin.flush(); ). Ví d :ặ ươ ứ ụ Sau khi đã khai báo m t đ i t ng mang tên Mayin b ng câu l nh nh trênộ ố ượ ằ ệ ư Đ in chu vi và di n tích hình ch nh t có c nh cd và cr ta có th vi t:ể ệ ữ ậ ạ ể ế Mayin << "Di n tích HCN = " << cd * cr << endl;ệ Mayin << "Chu vi HCN = " << 2*(cd + cr) << endl; Mayin.flush(); ho c :ặ Mayin << "Di n tích HCN = " << cd * cr << endl;ệ Mayin << "Chu vi HCN = " << 2*(cd + cr) << endl << flush; khi ch ng trình k t thúc m i d li u còn l i trong các đ i t ng s đ c tươ ế ọ ữ ệ ạ ố ượ ẽ ượ ự đ ng chuy n ra thi t b g n v i nó. Ví d máy in s in t t c m i d li u còn sótộ ể ế ị ắ ớ ụ ẽ ấ ả ọ ữ ệ l i trong Mayin khi ch ng trình k t thúc.ạ ươ ế IV. LÀM VI C V I FILEỆ Ớ Làm vi c v i m t file trên đĩa cũng đ c quan ni m nh làm vi c v i cácệ ớ ộ ượ ệ ư ệ ớ thi t b khác c a máy tính (ví d nh làm vi c v i máy in v i đ i t ng ế ị ủ ụ ư ệ ớ ớ ố ượ Mayin trong ph n trên ho c làm vi c v i màn hình v i đ i t ng chu n ầ ặ ệ ớ ớ ố ượ ẩ cout). Các đ iố t ng này đ c khai báo thu c l p ifstream hay ofstream tùy thu c ta mu n sượ ượ ộ ớ ộ ố ử d ng file đ đ c hay ghi.ụ ể ọ Nh v y, đ s d ng m t file d li u đ u tiên chúng ta c n t o đ i t ngư ậ ể ử ụ ộ ữ ệ ầ ầ ạ ố ượ và g n cho file này. Đ t o đ i t ng có th s d ng các hàm t o có s n trong haiắ ể ạ ố ượ ể ử ụ ạ ẵ l p ifstream và ofstream. Đ i t ng s đ c g n v i tên file c th trên đĩa ngayớ ố ượ ẽ ượ ắ ớ ụ ể trong quá trình t o đ i t ng (t o đ i t ng v i tham s là tên file) ho c cũng cóạ ố ượ ạ ố ượ ớ ố ặ 28 [...]... mở file DAYSO và gắn với f for (int i = 1; i> x; f . Ch ng 9. Các dòng nh p/xu t và file ơ ậ ấ CHƯƠNG 9 CÁC DÒNG NHẬP/XUẤT VÀ FILE Nh p/xu t v i cin/coutậ ấ ớ Đ nh d ngị ạ In ra máy in Làm vi c v i File ớ Nh p/xu t nh phânậ. (bế ộ ủ ẽ ị ị 29 Ch ng 9. Các dòng nh p/xu t và file ơ ậ ấ xóa).ios::app : b sung vào cu i file ố • ios::trunc : xóa n i dung file đã cóộ • ios::ate : chuy n con tr đ n cu i file ỏ ế ố • ios::nocreate. diem;ể } f.close(); getch(); } 36 Ch ng 9. Các dòng nh p/xu t và file ơ ậ ấ V. NH P/XU T NH PHÂNẬ Ấ Ị 1. Khái ni m v 2 lo i file: văn b n và nh phânệ ề ạ ả ị a. File văn b nả Trong file văn b n m i byte đ c

Ngày đăng: 05/08/2014, 15:20

TỪ KHÓA LIÊN QUAN

w