Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 26 trang
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