Khả năng vào ra mới của C++

Một phần của tài liệu Lập trình hướng đối tượng (Trang 26 - 30)

12.1. Tổng quan về stream trong C++

Nhìn lại C thấy thấy rằng C sử dụng rất nhiều hàm để nhập và xuất dữ liệu ví dụ nh: printf(), scanf(), sprintf(), sscanf(),... Các hàm này đợc khai báo trong file tiêu đề stdio.h. Về một khía cạnh, chúng không nhất quán về thứ tự và ngữ nghĩa của các tham số.

C++ đa ra streams thông qua các lớp và gọi các lớp này là th viện các dòng nhập/xuất. Streams tạo ra một khả năng rất mạnh cho phép sửa đổi và mở rộng và vì vậy có thể nhập/xuất đối với các kiểu dữ liệu mới do ngời dùng định nghĩa.

Các dòng nhập (istream) cho phép nhập dữ liệu vào stream, các dòng xuất (ostream) cho phép xuất dữ liệu từ stream. Th viện các dòng nhập/xuất là một cấu trúc cây các lớp và chúng ta sẽ nghiên cứu sau.

Trong tệp tiêu đề iostream.h C++ định nghĩa 2 đối tợng cin và cout tơng ứng là hai thiết bị chuẩn vào/ra và đ- ợc sử dụng cùng với hai toán tử tải bội >> (vào) và << (ra). Thông thờng, ta hiểu cin là bàn phím còn cout là màn hình.

12.2. Ghi dữ liệu lên thiết bị ra chuẩn (màn hình) bằng <<

Ví dụ 1:

#include <iosteam.h> void main()

{

cout << "Well come C++ "; }

<< là một toán tử 2 ngôi: toán hạng bên trái là nơi kết xuất thông tin (có thể là một thiết bị ngoại vi chuẩn hay một tập tin). Toán hạng bên phải là một biểu thức nào đó. Toán tử << có khả năng tải bội mà trớc hết nó đúng đối với các kiểu sau đây:

1. Kiểu dữ liệu cơ sở: char, int, float, double 2. Xâu ký tự: char*

3. Con trỏ (trừ kiểu char *) Ví dụ 2: #include <iosteam.h> void main() {int n=25; cout << "Value: " <<n; }

12.3. Vào dữ liệu từ thiết bị vào chuẩn (bàn phím) bằng >>

Ví dụ 3:

#include <iostream.h> #include <conio.h> void main() {

int n; float x; char s[20]; clrscr(); do {

cout << "nhap mot so nguyen, mot so thuc va mot xau ky tu ";

cin >> n >> x >> s;

cout << "da nhap" << n << ", " << x << endl << s; } while (n);

}

>> là một toán tử cho phép nhập dữ liệu cho các biến có kiểu: char, int, float, double và char*

Giống nh hàm scanf(), cin tuân theo một số quy ớc dùng trong việc phân tích các ký tự:

+ Các giá trị số đợc phân cách bởi SPACE, TAB, CR, LF. Gặp ký tự "không hợp lệ" ví dụ khi đọc số nhập dấu chấm thì ký tự này sẽ làm kết thúc lệnh cin và nó sẽ đ- ợc xem xét trong lần đọc sau.

+ Đối với xâu ký tự, dấu phân cách cũng là SPACE, TAB, CR còn đối với ký tự, dấu phân cách là ký tự CR. Trong trờng hợp này không có khái niệm "ký tự không hợp lệ". Mã sinh ra do bấm phím Enter của lần nhập trớc đó vẫn đợc xem xét cho lần nhập xâu ký tự tiếp theo, do đó sẽ có thể không nhập đợc ký tự mong muốn. Giải pháp đặt ra là trớc mỗi lần nhập xâu ký tự hoặc ký tự ta làm rỗng bộ đệm bàn phím bằng một trong 2 lệnh sau đây: fflush(stdin); // trong file tiêu đề stdio.h

cin.clear(); // hàm thành phần của lớp định nghĩa đối tợng cin.

+ Trong trờng hợp muốn nhập xâu ký tự có cả dấu cách thì nên dùng lệnh gets(), khai báo trong file tiêu đề stdio.h

Ví dụ 4:

#include <iostream.h> #include <stdio.h> void main() { char s[30];

cout<<"nhap mot xau: "; gets(s) cout<<"xau vua nhap: "; puts(s); }

Streams đợc sử dụng hoàn toàn độc lập với stdio nh- ng việc sử dụng đồng thời hai th viện này có thể làm phát sinh ra một số vấn đề, chẳng hạn sẽ không làm xuất ra dữ liệu theo đúng thứ tự mong muốn.

Bài 3. Một số khái niệm cơ bản của lập trình hớng đối tợng

Một phần của tài liệu Lập trình hướng đối tượng (Trang 26 - 30)

Tải bản đầy đủ (DOC)

(174 trang)
w