Các đóng nhập xuất và file
Chương Các dòng nhập/xuất file CHƯƠNG CÁC DÒNG NHẬP/XUẤT VÀ FILE Nhập/xuất với cin/cout Định dạng In máy in Làm việc với File Nhập/xuất nhị phân Trong C++ có sẵn số lớp chuẩn chứa liệu phương thức phục vụ cho thao tác nhập/xuất liệu NSD, thường gọi chung stream (dịng) Trong số lớp này, lớp có tên ios lớp sở, chứa thuộc tính để định dạng việc nhập/xuất kiểm tra lỗi Mở rộng (kế thừa) lớp có lớp istream, ostream cung cấp thêm toán tử nhập/xuất >>, >, > Toán tử cho phép nhập liệu từ dịng Input_stream vào cho danh sách biến Cú pháp chung sau: Input_stream >> biến1 >> biến2 >> … Input_stream đối tượng thuộc lớp istream Trường hợp Input_stream cin, câu lệnh nhập viết: cin >> biến1 >> biến2 >> … câu lệnh cho phép nhập liệu từ bàn phím cho biến Các biến thuộc kiểu chuẩn : kiểu nguyên, thực, ký tự, xâu kí tự Chú ý đặc điểm quan trọng câu lệnh • Lệnh bỏ qua không gán dấu trắng (dấu cách , dấu Tab, dấu xuống dòng ↵) vào cho biến (kể biến xâu kí tự) • Khi NSD nhập vào dãy byte nhiều cần thiết để gán cho biến số byte cịn lại kể dấu xuống dòng ↵ nằm lại cin Các byte tự động gán cho biến lần nhập sau mà không chờ NSD gõ thêm liệu vào từ bàn phím Do câu lệnh cin >> a >> b >> c; viết thành cin >> a; cin >> b; cin >> c; cần nhập liệu vào từ bàn phím lần chung cho lệnh (mỗi liệu nhập cho biến phải cách dấu trắng) Ví dụ : Nhập liệu cho biến int a; float b; 20 Chương Các dòng nhập/xuất file char c; char *s; cin >> a >> b >> c >> s; giả sử NSD nhập vào dãy liệu : 1234.517ABC12ED ↵ biến nhận giá trị cụ thể sau: a = 12 b = 34.517 c = 'A' s = "BC" cin lại dãy liệu : 12ED ↵ Nếu đoạn chương trình có câu lệnh cin >> s; s tự động gán giá trị "12E" mà không cần NSD nhập thêm liệu vào cho cin Qua ví dụ lần ta nhắc lại đặc điểm toán tử nhập >> biến lấy liệu vừa đủ cho kiểu biến (ví dụ biến c lấy kí tự 'A', b lấy giá trị 34.517) gặp dấu trắng (ví dụ a lấy giá trị 12, s lấy giá trị "BC" dù cin liệu) Từ ta thấy tốn tử >> không phù hợp nhập liệu cho xâu kí tự có chứa dấu cách C++ giải trường hợp số hàm (phương thức) nhập khác thay cho tốn tử >> Các hàm nhập kí tự xâu kí tự Nhập kí tự • cin.get() : Hàm trả lại kí tự (kể dấu cách, dấu ↵) Ví dụ: char ch; ch = cin.get(); − nhập AB↵, ch nhận giá trị 'A', cin B↵ − nhập A↵, ch nhận giá trị 'A', cin ↵ − nhập ↵, ch nhận giá trị '↵', cin rỗng • cin.get(ch) : Hàm nhập kí tự cho ch trả lại tham chiếu tới cin Do hàm trả lại tham chiếu tới cin nên viết phương thức nhập liên tiếp đối tượng cin Ví dụ: char c, d; cin.get(c).get(d); nhập AB↵ c nhận giá trị 'A' d nhận giá trị 'B' Trong cin cịn 'C↵' Nhập xâu kí tự 21 Chương Các dịng nhập/xuất file • cin.get(s, n, fchar) : Hàm nhập cho s dãy kí tự từ cin Dãy tính từ kí tự cin đủ n – kí tự gặp kí tự kết thúc fchar Kí tự kết thúc ngầm định dấu xuống dòng bị bỏ qua danh sách đối Tức viết câu lệnh dạng cin.get(s, n) xâu s nhận dãy kí tự nhập đủ n-1 kí tự đến NSD kết thúc nhập (bằng dấu ↵) Chú ý : − Lệnh tự động gán dấu kết thúc xâu ('\0') vào cho xâu s sau nhập xong − Các lệnh viết nối nhau, ví dụ: cin.get(s1, n1).get(s2,n2); − Kí tự kết thúc fchar (hoặc ↵) nằm lại cin Điều làm trơi lệnh get() Ví dụ: struct Sinhvien { char *ht; // họ tên char *qq; // quê quán }; void main() { int i; for (i=1; i