Chủ Nhật, 3 tháng 1, 2010

// // Leave a Comment

C++ Bài 1.4: Giao tiếp với console



Console là giao diện cơ bản của máy tính. Bàn phím là thiết bị vào cơ bản còn màn hình là thiết bị ra cơ bản.
Trong thư viện iostream của C++, các thao tác vào ra cơ bản của một chương trình được hỗ trợ bởi hai dòng dữ liệu : cin để nhập dữ liệu và cout để xuất. Thêm vào đó, còn có cerrclog là hai dòng dữ liệu dùng để hiển thị các thông báo lỗi trên thiết bị ra chuẩn (thường là màn hình) hoặc ra một file. Thông thường cout được gán với màn hình còn cin được gán với bàn phím.
Sử dụng hai dòng dữ liệu này bạn sẽ có thể giao tiếp với người sử dụng vì bạn có thể hiển thị các thông báo lên màn hình cũng như nhận dữ liệu từ bàn phím.

Xuất dữ liệu (cout)

Dòng cout được sử dụng với toán tử đã quá tải << (overloaded - bạn sẽ hiểu rõ hơn về thuật ngữ này trong phần lập trình hướng đối tượng)
cout << "Output sentence"; // Hiển thị Output sentence lên màn hình
cout << 120; // Hiển thị số 120 lên màn hình
cout << x; // Hiển thị nội dung biến x lên màn hình
Toán tử << được gọi là toán tử chèn vì nó chèn dữ liệu đi sau nó vào dòng dữ liệu đứng trước. Trong ví dụ trên nó chèn chuỗi "Output sentence", hằng số 120 và biến x vào dòng dữ liệu ra cout.Chú ý rằng ở dòng đầu tiên chúng ta sử dụng dấu ngoặc kép vì đó là một chuỗi kí tự. Khi chúng ta muốn sử dụng các hằng xâu kí tự ta phải đặt chúng trong cặp dấu ngoặc kép để chúng có thể được phân biệt với các biến. Ví dụ, hai lệnh sau đây là hoàn toàn khác nhau:
cout << "Hello"; // Hiển thị Hello lên màn hình
cout << Hello; // Hiển thị nội dung của biến Hello lên màn hình
Toán tử chèn (<<) có thể được sử dụng nhiều lần trong một câu lệnh:
cout << "Hello, " << "I am " << "a C++ sentence";
Câu lệnh trên sẽ in thông báo Hello, I am a C++ sentence lên màn hình. Sự tiện lợi của việc sử dụng lặp lại toán tử chèn (<<) thể hiện rõ khi chúng ta muốn hiển thị nhiều biến và hằng hơn là chỉ một biến:
cout << "Hello, I am " << age << " years old and my email address is "
<< email_add;
Cần phải nhấn mạnh rằng cout không nhảy xuống dòng sau khi xuất dữ liệu, vì vậy hai câu lệnh sau : cout << "This is a sentence.";
cout << "This is another sentence.";
sẽ được hiển thị trên màn hình: This is a sentence.This is another sentence.
Bởi vậy khi muốn xuống dòng chúng ta phải sử dụng kí tự xuống dòng, trong C++ là :
cout << "First sentence. ";
cout << "Second sentence.Third sentence.";

sẽ viết ra màn hình như sau:
First sentence.Second sentence.Third sentence.
Thêm vào đó, để xuống dòng bạn có thể sử dụng tham số endl.
Ví dụ cout << "First sentence." << endl;
cout << "Second sentence." << endl;

sẽ in ra màn hình:
First sentence.
Second sentence.

Tham số endl có một tác dụng đặc biệt khi nó được dùng với các dòng dữ liệu sử dụng bộ đệm: các bộ đệm sẽ được flushed ( chuyển toàn bộ thông tin từ bộ đệm ra dòng dữ liệu). Tuy nhiên, theo mặc định cout không sử dụng bộ đệm.

Nhập dữ liệu (cin).

Thao tác vào chuẩn trong C++ được thực hiện bằng cách sử dụng toán tử đã quá tải >> với dòng cin. Theo sau toán tử này là biến sẽ lưu trữ dữ liệu được đọc vào. Ví dụ: int age;
cin >> age;
khai báo biến age có kiểu int và đợi nhập dữ liệu từ cin (bàn phím) để lưu trữ nó trong biến kiểu nguyên này.
cin chỉ bắt đầu sử lý dữ liệu nhập từ bàn phím sau khi phím Enter được gõ. Vì vậy dù bạn chỉ nhập một kí tự thì cin vẫn sẽ kiên nhẫn chờ cho đến khi bạn gõ phím Enter.





// i/o example
#include <iostream.h> int main (){ int i; cout << "Please enter an integer value: "; cin >> i; cout << "The value you entered is " << i; cout << " and its double is " << i*2 << "."; return 0;}
Please enter an integer value: 702
The value you entered is 702 and its double is 1404.

Người sử dụng chương trình có thể là một trong những nguyên nhân gây ra lỗi trong một chương trình đơn giản sử dụng cin (như chương trình trên). Trong khi bạn muốn nhận một số nguyên thì người sử dụng lại nhập vào tên của họ (là một xâu kí tự). Kết quả là chương trình sẽ chạy sai vì đó không phải là những gì mà chương trình mong đợi từ người dùng. Bởi vậy khi bạn sử dụng dữ liệu nhập vào từ cin bạn phải tin chắc rằng người dùng sẽ hoàn toàn hợp tác và rằng anh ta sẽ không nhập tên của mình khi chương trình yêu cầu nhập số nguyên. Sau này, khi nghiên cứu việc sử dụng các xâu kí tự chúng ta sẽ xem xét các giải pháp khả thi để giải quyết các lỗi loại này.
Bạn có thể dùng cin để nhập một lúc nhiều dữ liệu từ người dùng: cin >> a >> b; tương đương với cin >> a;
cin >> b;
Trong cả hai trường hợp người sử dụng phải cung cấp hai dữ liệu, một cho biến a và một cho biến b và được ngăn cách bởi một dấu trống hợp lệ: một dấu cách, dấu tab hay kí tự xuống dòng.


Trong trường hợp kiểu không được chỉ rõ (như trong ví dụ cuối) trình dịch sẽ coi nó là kiểu int.

0 comments: