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

Hệ thống xuất nhập C++

29 406 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 29
Dung lượng 57,49 KB

Nội dung

Hệ thống xuất nhập C++

Chương 7 Hệ thống Nhập/Xuất C++ • Cơ sở Nhập/Xuất C++ • Nhập/Xuất có đònh dạng • Sử dụng width(), precision() và fill() • Sử dụng bộ thao tác Nhập/Xuất • Tạo bộ chèn • Tạo bộ chiết Chương 7 Hệ thống Nhập / Xuất C++ 208 Chương 7 Hệ thống Nhập / Xuất C++ 209 I/ Cơ sở Nhập/Xuất C++ Hệ thống Nhập/Xuất của C++ cũng điều khiển các stream . • Stream là một thiết bò logic có chức năng tạo ra hoặc sử dụng thông tin. Nhờ hệ thống Nhập/Xuất của C++, mỗi stream được liên kết với thiết bò vật lý. Cho dù có nhiều loại thiết bò vật lý khác nhau, nhưng các stream đều được xử lý như nhau. Chính vì vậy mà hệ thống Nhập/Xuất có thể vận hành trên bất kỳ loại thiết bò nào. Khi một chương trình C++ được thực thi sẽ có bốn stream được mở một cách tự động. Stream Ý nghiã Thiết bò mặc đònh cin thiết bò nhập chuẩn Bàn phím cout thiết bò xuất chuẩn Màn hình cerr thiết bò báo lỗi chuẩn Màn hình clog Phiên bản của cerr Màn hình Có thể đònh lại cho các stream để liên kết gắn với các thiết bò xuất nhập khác. • Trong chương I, C++ cung cấp các hổ trợ cho hệ thống Nhập/Xuất trong file iostream.h Nội dung của file này là các phân cấp lớp hổ trợ các thao tác Nhập/Xuất. C++ có hai phân cấp lớp Nhập/Xuất, chúng có liên hệ với nhau nhưng chúng không giống nhau. Phân cấp lớp Nhập/Xuất thứ nhất được suy dẫn từ lớp Nhập/Xuất mức thấp tên là streambuf. Lớp này cung cấp các thao tác cơ bản của Nhập/Xuất cấp thấp, cũng như các hổ trợ cơ bản cho toàn bộ hệ thống Nhập/Xuất của C++. Lập trình viên trình độ cao nên sử dụng trực tiếp lớp streambuf này. Phân cấp lớp Nhập/Xuất thứ hai có tên ios , là lớp Nhập/Xuất cấp cao. Nó cung cấp các thao tác về đònh dạng, kiểm lỗi, chứa nhiều hàm và biến dùng để điều khiển và kiểm soát các thao tác cơ bản của các stream Nhập/Xuất. Lớp ios là lớp cơ sở để suy dẫn ra các lớp istream, ostream và iostream.h. Ba lớp dẫn xuất này được sử dụng để tạo ra các stream Nhập, Xuất và Nhập/Xuất. Chương 7 Hệ thống Nhập / Xuất C++ 210 II/ Nhập/Xuất có đònh dạng 1/ Mỗi stream của C++ được đi kèm với các cờ đònh dạng (format flags). Các cờ đònh dạng này xác đònh cách thức thể hiện của dữ liệu, các cờ được mã hoá dưới dạng số nguyên kiểu long int. Các cờ đònh dạng được đặt tên và giá trò trong lớp ios qua bảng liệt kê như sau : // ios format flags enum{ skipws = 0x0001; left = 0x0002; right = 0x0004; internal = 0x0008; dec = 0x0010; oct = 0x0020; hex = 0x0040; showbase = 0x0080; showpoint = 0x0100; uppercase = 0x0200; showpos = 0x0400; scientific = 0x0800; fixed = 0x1000; unitbuf = 0x2000; stdio = 0x4000; }; Khi một cờ đònh dạng nào đó được thiết lập thì đặc tính của cờ đó trở nên có hiệu lực. Nếu cờ đònh dạng bò xoá, hệ thống sẽ dùng giá trò mặc đònh cho đặc tính của cờ đó. 2/ Mô tả các cờ đònh dạng • Khi cờ skipws được thiết lập, các ký tự cách (gồm các ký tự khoảng cách, tab và xuống dòng) được bỏ đi khi đọc một stream. Nếu cờ này bò xoá, các ký tự cách sẽ không bò bỏ đi. Thường áp dụng cho một số kiểu file trên diã. Chương 7 Hệ thống Nhập / Xuất C++ 211 • Khi cờ left được thiết lập, kết xuất sẽ được canh biên trái. • Khi cờ right được thiết lập, kết xuất sẽ được canh biên phải. • Khi cờ internal được thiết lập, dấu của trò số được canh biên trái trong khi con số được canh biên trái. Nếu cả ba cờ đều bò xoá, theo mặc đònh, kết xuất sẽ được canh biên phải. • Theo mặc đònh, giá trò nguyên được trình bày dưới dạng số thập phân. Tuy nhiên. có thể thay đổi cơ số của kết xuất. Thiết lập cờ oct sẽ làm cho kết xuất được trình bày dưới dạng số hệ bát phân. Thiết lập cờ hex kết xuất là số hệ thập lục. Để trả lại kiểu số thập phân, cần thiết lập cờ dec. • Khi đặt cờ showbase, cơ số của giá trò số được trình bày. • Khi đặt cờ showpoint cho phép in dấu chấm thập phân và các số không đi sau kèm theo các giá trò kiểu dấu chấm động. • Theo mặc đònh, khi một con số kiểu số mũ được in ra, chữ "e" được trình bày ở kiểu chữ thường. Tương tự, khi in một giá trò số ở hệ thập lục, ký tự " dùng chỉ hệ thập lục được trình bày ở kiểu chữ thường. Khi cờ upcase được thiết lập, các ký tự nói trên sẽ được trình bày bằng kiểu chữ in hoa. • Khi đặt cờ showpos làm cho xuất hiện dấu cộng phiá trước các giá trò số dương. • Khi đặt cờ scientific làm các giá trò số kiểu dấu chấm động được trình bày dươí dạng mũ. Nhưng khi đặt cờ fixed, các giá trò số kiểu dấu chấm động được trình bày dươí dạng thường có 6 số lẽ. • Khi đặt cờ unitbuf, hệ thống Nhập/Xuất của C++ đẩy stream xuất ra hết sau mỗi thao tác xuất. • Khi đặt cờ stdio, thiết bò xuất chuẩn stdout và thiết bò nhập chuẩn stdin sẽ được đẩy ra sau mỗi thao tác xuất. Tuy nhiên cờ này không được đònh nghiã trong chuẩn trù đònh ANSI C++, và có thể không áp dụng trong một số trình biên dòch. 3/ Các hàm liên quan đến cờ đònh dạng Chương 7 Hệ thống Nhập / Xuất C++ 212 • Hàm setf() dùng thiết lập cờ đònh dạng. Hàm này thuộc lớp ios. Dạng tổng quát : long setf(long flags) ; Hàm trả về giá trò được thiết lập trước đó của cờ và thiết lập các cờ có tên trong hàm. Ví dụ thiết lập cờ showpos : stream.setf(ios::showpos) ; stream là tên stream cần để thiết lập cờ showpos Lưu ý, trong C++, không thể đặt cờ đònh dạng ở phạm vi toàn cục chung cho tất cả các stream, mỗi stream sẽ mang một thông tin trạng thái các đònh dạng riêng của nó và chúng độc lập với nhau. Có thể gọi hàm setf() để lập nhiều cờ cùng lúc, bằng cách dùng toán tử OR. Ví dụ cout.setf(ios::showbase | ios::hex) ; • Hàm xoá cờ unsetf(), dùng để xoá một hay nhiều cờ đònh dạng. Dạng tổng quát : long unsetf(long flags) ; Hàm trả về giá trò trước đó của cờ. • Hàm flags() cho biết trạng thái của cờ đònh dạng. Hàm này thuộc lớp ios. Dạng thường gọi : long flags() ; Dạng có kèm đối số long flags(long f) ; cho phép thiết lập tất cả các cờ đònh dạng của stream dựa theo giá trò của đối số khi gọi hàm. Từng bit của giá trò f sẽ được gán cho biến lưu trò cờ đònh dạng, và sẽ xoá tình trạng cờ đònh dạng trước đó. Hàm sẽ trả về giá trò tình trạng các cờ đònh dạng trước đó. Ví dụ 2.1 Minh hoạ hàm setf() #include <iostream.h> Chương 7 Hệ thống Nhập / Xuất C++ 213 int main() { // display using default settings cout << 123.23 << " hello " << 100 << '\n'; cout << 10 << ' ' << -10 << '\n'; cout << 100.0 << "\n\n"; // now, change formats cout.unsetf(ios::dec); // not required by all compilers cout.setf(ios::hex | ios::scientific); cout << 123.23 << " hello " << 100 << '\n'; cout.setf(ios::showpos); cout << 10 << ' ' << -10 << '\n'; cout. setf(ios::showpoint | ios::fixed); cout << 100.0; return 0; } Kết quả của chương trình 123.23 hello 100 10 -10 100 1.232300e+02 hello 64 a fffffff6 +100.000000 Ví dụ 2.2 Minh hoạ hàm unsetf() #include <iostream.h> int main() { Chương 7 Hệ thống Nhập / Xuất C++ 214 cout.unsetf(ios::dec); cout.setf(ios::uppercase | ios::showbase | ios::hex); cout << 88 << '\n'; cout.unsetf(ios::uppercase); cout << 88 << '\n'; return 0; } Ví dụ 2.3 Minh hoạ hàm flags() #include <iostream.h> void showflags(); int main() { // show default condition of format flags showflags(); cout.setf(ios::oct | ios::showbase | ios::fixed); showflags(); return 0; } // This function displays the status of the format flags. void showflags() { long f; f = cout.flags(); // get flag settings Kết quả của chương trình 0X58 0x58 Chương 7 Hệ thống Nhập / Xuất C++ 215 if(f & ios::skipws) cout << "skipws on\n"; else cout << "skipws off\n"; if(f & ios::left) cout << "left on\n"; else cout << "left off\n"; if(f & ios::right) cout << "right on\n"; else cout << "right off\n"; if(f & ios::internal) cout << "internal on\n"; else cout << "internal off\n"; if(f & ios::dec) cout << "dec on\n"; else cout << "dec off\n"; if(f & ios::oct) cout << "oct on\n"; else cout << "oct off\n"; if(f & ios::hex) cout << "hex on\n"; else cout << "hex off\n"; if(f & ios::showbase) cout << "showbase on\n"; else cout << "showbase off\n"; if(f & ios::showpoint) cout << "showpiont on\n"; else cout << "showpoint off\n"; if(f & ios::showpos) cout << "showpos on\n"; else cout << "showpos off\n"; if(f & ios::uppercase) cout << "uppercase on\n"; else cout << "uppercase off\n"; if(f & ios::scientific) cout << "scientific on\n"; else cout << "scientific off\n"; if(f & ios::fixed) cout << "fixed on\n"; else cout << "fixed off\n"; Chương 7 Hệ thống Nhập / Xuất C++ 216 if(f & ios::unitbuf) cout << "unitbuf on\n"; else cout << "unitbuf off\n"; if(f & ios::stdio) cout << "stdio on\n"; else cout << "stdio off\n"; cout << "\n"; } Kết quả của chương trình skipws is on left is off right is off internal is off dec is off oct is off hex is off showbase is off showpoint is off uppercase is off showpos is off scientific is off fixed is off unitbuf is off stdio is off skipws is on left is off right is off internal is off dec is off oct is on hex is off showbase is on showpoint is off uppercase is off showpos is off scientific is off fixed is on unitbuf is off stdio is off Ví dụ 2.4 Minh hoạ hàm flags(), sử dụng mặt nạ cờ (flag mask) dùng để thiết lập các cờ showpos, showbase, oct và right. Bốn cờ này mang giá trò tương ứng là 0x0400, 0x0080, 0x0020, 0x0004. Cộng bốn giá trò này ta có giá trò 0x04A4 . #include <iostream.h> void showflags() ; int main() [...]... exit(1); Chương 7 Hệ thống Nhập / Xuất C++ 208 Chương 7 Hệ thống Nhập / Xuất C++ 214 Quá tải toán tử Nhập /Xuất cho các lớp tự tạo là một trong những lý do quyết định sử dụng mệnh đề Nhập /Xuất của C++ thay cho việc sử dụng các hàm Nhập /Xuất theo kiểu C. • Theo C++, thao tác xuất còn được gọi... Hệ thống Nhập / Xuất C++ 212 cout << setw(10) << 100; Lưu ý các bộ thao tác Nhập /Xuất chỉ có ảnh hưởng đến stream có tên trong biểu thức Nhập /Xuất, các bộ thao tác này không ảnh hưởng đến tất cả các stream đang mở. • Sử dụng bộ thao tác Nhập /Xuất là cách thứ hai để định dạng thông tin trong hệ thống Nhập /Xuất của C++. Trong một số trường hợp, sử dụng bộ thao tác Nhập /Xuất. .. 209 I/ Cơ sở Nhập /Xuất C++ Hệ thống Nhập /Xuất của C++ cũng điều khiển các stream . • Stream la ø một thiết bị logic có chức năng tạo ra hoặc sử dụng thông tin. Nhờ hệ thống Nhập /Xuất của C++, mỗi stream được liên kết với thiết bị vật lý . Cho dù có nhiều loại thiết bị vật lý khác nhau, nhưng các stream đều được xử lý như nhau . Chính vì vậy mà hệ thống Nhập /Xuất có thể vận hành... là các phân cấp lớp hổ trợ các thao tác Nhập /Xuất. C++ có hai phân cấp lớp Nhập /Xuất, chúng có liên hệ với nhau nhưng chúng không giống nhau. Phân cấp lớp Nhập /Xuất thứ nhất được suy dẫn từ lớp Nhập /Xuất mức thấp tên là streambuf . Lớp này cung cấp các thao tác cơ bản của Nhập /Xuất cấp thấp, cũng như các hổ trợ cơ bản cho toàn bộ hệ thống Nhập /Xuất của C++ . Lập trình viên trình độ cao nên sử... hệ thống Nhập /Xuất của C++ đẩy stream xuất ra hết sau mỗi thao tác xuất. • Khi đặt cờ stdio , thiết bị xuất chuẩn stdout và thiết bị nhập chuẩn stdin sẽ được đẩy ra sau mỗi thao tác xuất. Tuy nhiên cờ này không được định nghiã trong chuẩn trù định ANSI C++, và có thể không áp dụng trong một số trình biên dịch. 3/ Các hàm liên quan đến cờ định dạng Chương 7 Hệ thống Nhập / Xuất C++. .. tác Nhập /Xuất (I/O Manipulator) Bộ thao tác Nhập /Xuất là các hàm đặc biệt sử dụng trong các mệnh đề Nhập /Xuất. Cần phải nạp file tiêu đề iomanip.h vào chương trình. Các bộ thao tác Nhập /Xuất chuẩn được trình bày trong bảng sau : Bộ thao tác Mục đích Nhập /Xuất dec Định dạng dữ liệu kiểu số ở dạng thập phân Xuất endl Xuất một ký tự xuống dòng và đẩy stream ra thiết bị vật lý Xuất ends Xuất. .. lớp Nhập /Xuất thứ hai có tên ios , là lớp Nhập /Xuất cấp cao. Nó cung cấp các thao tác về định dạng, kiểm lỗi, chứa nhiều hàm và biến dùng để điều khiển và kiểm soát các thao tác cơ bản của các stream Nhập /Xuất. Lớp ios là lớp cơ sở để suy dẫn ra các lớp istream , ostream và iostream.h . Ba lớp dẫn xuất này được sử dụng để tạo ra các stream Nhập, XuấtNhập /Xuất. Chương 7 Hệ thống Nhập. .. trong f Nhập /Xuất setprecision(int p) Đặt độ chính xác là p Xuất setw(int w) Đặt độ rộng của trường là w Xuất ws Bỏ qua các ký tự cách (khoảng cách, tab, xuống dòng) Nhập Các bộ thao tác có thể xuất hiện trong các mệnh đề Nhập /Xuất. Ví dụ cout << oct << 100 << hex << 100; Chương 7 Hệ thống Nhập / Xuất C++ 214 cout.unsetf(ios::dec); cout.setf(ios::uppercase... các bộ thao tác Nhập /Xuất thay cho hàm định dạng. 2. Viết một chương trình nhỏ xuất giá trị 100 ở dạng số thập lục phân có kèm theo ký tự chỉ hệ thập lục (0x). Hãy sử dụng bộ thao tác setiosflags(). V. Tạo bộ chèn vào (inserter) Kết quả chương trình x sqrt(x) x^2 2 1.4142 4 3 1.7321 9 4 2 16 5 2.2361 25 Chương 7 Hệ thống Nhập / Xuất C++ 210 II/ Nhập /Xuất có định dạng... • Một bộ chèn không chỉ giởi hạn ở việc xuất thông tin dạng văn bản. Nó có thể thực hiện các thao tác hay chuyển đổi thông tin cần thiết để kết xuất thông tin ra thiết bị riêng biệt hay một tình huống riêng biệt nào đó. Ví dụ 5.3 Bộ chèn xuất thông tin ra máy vẽ (plotter) Chương 7 Hệ thống Nhập / Xuất C++ 221 • Trong C++, thao tác nhập còn được gọi là chiết (extractor), . Chương 7 Hệ thống Nhập / Xuất C++ 209 I/ Cơ sở Nhập /Xuất C++ Hệ thống Nhập /Xuất của C++ cũng điều khiển. Hệ thống Nhập /Xuất C++ • Cơ sở Nhập /Xuất C++ • Nhập /Xuất có đònh dạng • Sử dụng width(), precision() và fill() • Sử dụng bộ thao tác Nhập/ Xuất

Ngày đăng: 04/09/2012, 15:12

HÌNH ẢNH LIÊN QUAN

cout thiết bị xuất chuẩn Màn hình  cerr thiết bị báo lỗi chuẩn Màn hình     clog Phiên bản của cerr Màn hình  - Hệ thống xuất nhập C++
cout thiết bị xuất chuẩn Màn hình cerr thiết bị báo lỗi chuẩn Màn hình clog Phiên bản của cerr Màn hình (Trang 3)
Chức năng của hàm là canh giữa một chuỗi ký tự trên màn hình. Để thực hiện hàm này, hãy sử dụng hàm width() - Hệ thống xuất nhập C++
h ức năng của hàm là canh giữa một chuỗi ký tự trên màn hình. Để thực hiện hàm này, hãy sử dụng hàm width() (Trang 14)

TỪ KHÓA LIÊN QUAN

w