NHẬP VÀ XUẤT TRONG C

Một phần của tài liệu giáo trình lập trình C (Trang 28 - 38)

Trong bất kỳ ngôn ngữ lập trình nào, việc nhập giá trị cho các biến và in chúng ra sau khi xử lý có thể được làm theo hai cách:

1. Thông qua phương tiện nhập/xuất chuẩn (I / O).

2. Thông qua những tập tin.

Trong phần này ta sẽ nói về chức năng nhập và xuất cơ bản. Nhập và xuất (I/O) luôn là các thành phần quan trọng của bất kỳ chương trình nào. Ðể tạo tính hữu ích, chương trình của bạn cần có khả năng nhập dữ liệu vào và hiển thị lại những kết quả của nó.

Trong C, thư viện chuẩn cung cấp những thủ tục cho việc nhập và xuất. Thư

viện chuẩn có

những hàm quản lý các thao tác nhập/xuất cũng như các thao tác trên ký tự và

chuỗi. Trong

chương này, tất cả những hàm nhập dùng để đọc dữ liệu vào từ thiết bị nhập

chuẩn và tất cả

những hàm xuất dùng để viết kết quả ra thiết bị xuất chuẩn. Thiết bị nhập chuẩn

thông thường

là bàn phím. Thiết bị xuất chuẩn thông thường là màn hình (console). Nhập và

xuất ra có thể

được định hướng đến tập tin hay từ tập tin thay vì thiết bị chuẩn. Những tập tin có thể được lưu

15

trên đĩa hay trên bất cứ thiết bị lưu trữ nào khác. Dữ liệu đầu ra cũng có thể được

gửi đến máy

in.Thư viện chuẩn trong C cung cấp hai hàm để thực hiện các yêu cầu nhập và

xuất có định

dạnglà:

 printf() - Hàm xuất có định dạng.

 scanf() - Hàm nhập có định dạng.

Những hàm này gọi là những hàm được định dạng vì chúng có thể đọc và in dữ liệu ra theo các định dạng khác nhau được điều khiển bởi người dùng. Bộ định dạng qui định dạng thức mà theo đó giá trị của biến sẽ được nhập vào và in ra.

1.7.1 Xuất dữ liệu - hàm printf

Hàm printf() được sử dụng để xuất dữ liệu ra màn hình. Nguyên mẫu của hàm là:

printf ( <Chuỗi định dạng>, Danh sách giá trị );

Trong đó chuỗi định dạng là phần xâu ký tự định dạng cách thức hiển thị theo chuẩn ra

màn hình. Phần danh sách giá trị thường được cách nhau bởi dấu phẩy. Do đó C cung cấp các

kiểu định dạng dành riêng cho mỗi kiểu dữ liệu khác nhau (xem Bảng 1.3) .

Chuỗi định dạng Kiểu dữ liệu Đối số có dạng

%d int Số nguyên

%i int Hệ số 10 có dấu

%o int Số nguyên hệ 8 không dấu

%u int Số nguyên không dấu

%x int Số nguyên hệ 16 không dấu

%X int Số nguyên hệ 16 bắt đầu từ chữ cái

A,B,C

%e,%E float,double Dạng thập phân dấu chấm động

%f,%lf float, Dạng thập phân dấu chấm tĩnh

%g,%G double Hai loại thập phân dấu chấm tĩnh và

động

%c char Ký tự

%s char * Xâu ký tự

Bảng 1.3: Định dạng khi xuất dữ liệu Ví dụ:

 Xuất dữ liệu có kiểu số nguyên:

printf (“%d”, n);

 Xuất dữ liệu có kiểu số thực:

printf ( “%f”, n);hoặcprintf ( “%lf”, n);  Xuất ra màn hình chuỗi

ký tự:

printf (“Hello!”);

Nếu ta sử dụng xuất ra nhiều biến với nhiều kiểu dữ liệu khác nhau trên một hàng hoặc trên nhiều hàng, thì đối với một loại biến khác nhau, xuất ra ở vị trí nào trong chuỗi thì phải định dạng kiểu dữ liệu cho loại biến đó tương ứng với vị trí xuất ra.

Chương trình sau đây sẽ khai báo, nhập giá trị cho một số nguyên và một số thực, sau khi hiển thị giá trị của chúng ra màn hình.

16

Ví dụ 1. 2:

#include

<stdio.h

> int main() {

int a;

float b;

printf("a = ");scanf("%d",&a);

printf("b = ");scanf("%f",&b);

printf("\nInterger number: %d”,a);

printf("\nFloat number: %6.2f", b);

}

Kết quả thực hiện của chương trình như sau:

a = 10

b = 20

Interger number:1 0

Float number:2 0.00

Chú ý : Để thuận tiện cho việc trình bày, từ đây về sau kí hiệu (enter) sẽ được sử dụng để biểu thị việc xuống dòng, kết thúc một thao tác nhập liệu từ bàn phím.

1.7.2 Cách xuất dữ liệu dạng có quy cách

Các lệnh định dạng có thể có bổ từ (modifier), để thay đổi các đặc tả chuyển đổi gốc. Sau đây là các bổ từ được chấp nhận trong câu lệnh printf(). Nếu có nhiều bổ từ được dùng thì chúng tuân theo trình tự sau:

 Bổ từ ‘-’

Dữ liệu sẽ được canh trái bên trong không gian dành cho nó, chúng sẽ được in bắt đầu từ vị trí ngoài cùng bên trái.

 Bổ từ xác định độ rộng

Chúng có thể được dùng với kiểu: float, double hay char array (chuỗi-string).

Bổ từ xác định độ rộng là một số nguyên xác định độ rộng nhỏ nhất của trường dữ liệu. Các dữ liệu có độ rộng nhỏ hơn sẽ cho kết quả canh phải trong trường dữ liệu.

Các dữ liệu có kích thước lớn hơn sẽ được in bằng cách dùng thêm những vị trí cho đủ yêu cầu.Ví dụ, %10f là lệnh định dạng cho các mục dữ liệu kiểu số thực với độ rộng trường dữ liệu thấp nhất là 10.

 Bổ từ xác định độ chính xác

Chúng có thể được dùng với kiểu float,double hay mảng ký tự. Bổ từ xác định độ rộng chính xác được viết dưới dạng .m với m là một số nguyên. Nếu sử dụng với kiểu float và double, chuỗi số chỉ ra số con số tối đa có thể được in ra phía bên phải dấu chấm thập phân.

Nếu phần phân số của các mục dữ liệu kiểu floathaydouble vượt quá độ rộng

con số chỉ

trong bổ từ, thì số đó sẽ được làm tròn. Nếu chiều dài chuỗi vượt quá chiều dài

chỉ định thì

chuỗi sẽ được cắt bỏ phần dư ra ở phía cuối. Một vài số không (0) sẽ được thêm

vào nếu số

con số thực sự trong một mục dữ liệu ít hơn được chỉ định trong bổ từ. Tương tự,

các khoảng

trắng sẽ được thêm vào cho chuỗi ký tự. Ví dụ, %10.3f là lệnh định dạng cho mục

dữ liệu kiểu

float, với độ rộng tối thiểu cho trường dữ liệu là 10 và 3 vị trí sau phần thập phân.

 Bổ từ ‘0’

Theo mặc định, việc thêm vào một trường được thực hiện với các khoảng trắng. Nếu người dùng muốn thêm vào trường với số không (0), bổ từ này phải được dùng.

 Bổ từ ‘l’

17

Bổ từ này có thể được dùng để hiển thị số nguyên như: long int hay một tham số kiểu double. Mã định dạng tương ứng cho nó là %ld.

 Bổ từ ‘h’

Bổ từ này được dùng để hiển thị kiểu short int. Mã định dạng tương ứng cho nó là %hd.  Bổ từ ‘*’

Bổ từ này được dùng khi người dùng không muốn chỉ trước độ rộng của trường mà muốn chương trình xác định nó. Nhưng khi đi với bổ từ này, một tham số được yêu cầu phải chỉ ra độ rộng trường cụ thể.

Chương trình sau đây sẽ khai báo, gán giá trị cho 2 số nguyên (int) và 2 số thực (float), sau đó in ra màn hình giá trị của chúng theo các quy cách định dạng khác nhau.

Ví dụ 1. 3:

#include

<stdio.h

>

main(){

int a,b;

float x,y;

a=6; b=8; x=3.14; y=6.24;

printf("\n value of a

= %d",a);

printf("\n value of b

= %8d",b);

printf("\n value of x

= %f",x);

printf("\n value of y =

%9.1f",y);

}

Kết quả chương trình như sau:

value of a = 6

value of b = 8

value of x =3.1400

value of y= 9.1

1.7.3 Phương thức nhập dữ liệu

Để nhập dữ liệu C cung cấp hàm scanf(), với nguyên mẫu như sau:

scanf ( <Chuỗi định dạng>, &Tên biến );

Tương tự như với hàm printf(), hàm scanf() khi nhập dữ liệu ta vẫn phải định dạng kiểu dữ liệu của biến. Ví dụ, khi nhập dữ liệu cho biến kiểu nguyên, ta phải định dạng biến kiểu nguyên là %d. C cung cấp các định dạng cho biến trong hàm scanf() sau đây:

Định dạng Ý nghĩa

%d Nhập số nguyên

%o Nhập số nguyên hệ *

%x Nhập số nguyên hệ 16

%c Nhập ký tự

%s Nhập xâu ký tự

%f Nhập số thực

%ld Nhập số nguyên kiểu longint

%lf Nhập số nguyên kiểu double

18

Bảng 1.4: Chuỗi định dạng khi nhập dữ liệu.

Chương trình sau đây cho phép người dùng nhập vào các số nguyên và số thực sau đó hiển thị giá trị của chúng ra màn hình.

Ví dụ 1. 4:

#include

<stdio.h

> int main(){

int a,b;

float x,y;

printf("\n Input integer a = ");

scanf("%d",&a);

printf("\n Input integer b = ");

scanf("%d",&b);

printf("\n Input float x = ");

scanf("%f",&x);

printf("\n Input float y = "); scanf("%f",&y);

printf("\n---\n");

printf(" a=%d\n b=%8d\n x=%f\n y=

%7.2f",a,b,x,y);

}

Kết quả chương trình như sau:

Input integera= 5

Input

integer b = 10

Input float x= 10.5

Input float y = 15

--- --- a=5

b= 10

x

= 1 0 . 5 0 0 0 0 0 y

= 1 5

. 0 0

1.7.4 Bộ nhớ đệm Nhập và Xuất (Buffered I/O)

Ngôn ngữ C bản thân nó không định nghĩa các thao tác nhập và xuất. Tất cả thao tác nhập và xuất được thực hiện bởi các hàm có sẵn trong thư viện hàm của C, đó là bộ nhớ đệm Nhập và Xuất - được dùng để đọc và viết các ký tự ASCII.

Một vùng đệm là nơi lưu trữ tạm thời, nằm trên bộ nhớ máy tính hoặc trên thẻ nhớ của bộ điều khiển thiết bị (controller card). Các ký tự nhập vào từ bàn phím được đưa vào bộ nhớ và đợi đến khi người dùng nhấn phím return hay enter thì chúng sẽ được thu nhận như một khối và cung cấp cho chương trình.

Bộ nhớ đệm nhập và xuất có thể được phân thành:

 Thiết bị nhập/xuất chuẩn (Console I/O)

 Tập tin đệm nhập/xuất (Buffered File I/O)

Thiết bị nhập/xuất chuẩn liên quan đến những hoạt động của bàn phím và màn hình của máy tính. Tập tin đệm nhập/xuất liên quan đến những hoạt động thực hiện đọc và viết dữ liệu vào tập tin. Các hàm đơn giản nhất của Thiết bị nhập/xuất chuẩn là: getchar() - Ðọc một và chỉ một ký tự từ bàn phím và putchar() - Xuất một ký tự đơn ra màn hình.

 Hàm getchar(): Được dùng để đọc dữ liệu nhập vào, chỉ một ký tự tại một thời điểm từ

bàn phím. Trong hầu hết việc thực thi của C, khi dùng getchar(), các ký tự nằm trong vùng

đệm cho đến khi người dùng nhấn phím xuống dòng. Vì vậy nó sẽ đợi cho đến khi phím

‘Enter’ được gõ. Hàm getchar() không có tham số, nhưng vẫn phải có cặp dấu ngoặc đơn.

19

Nó đơn giản lấy về ký tự tiếp theo và sẵn sàng đưa ra cho chương trình. Chúng ta nói rằng hàm này trả về một giá trị có kiểu ký tự.

c = getchar();

Chương trình sau đây sử dụng hàm getchar() để nhập một kí tự từ bàn phím và hiển thị ký tự đã nhập ra màn hình.

Ví dụ 1. 5:

#include

<stdio.h

> void main(){

char ch;

printf(“\nEnter a character: “); ch = getchar();

printf(“\nEntered character is: %c. “, ch);

}

Kết quả như sau:

Enter a character: T Entered character is: T.

 Hàm putchar(): Là hàm xuất ký tự trong C, nó sẽ xuất một ký tự lên màn hình tại vị trí

con trỏ màn hình. Hàm này yêu cầu một tham số. Tham số của hàm putchar() có thể thuộc

các loại sau:

- Hằng ký tự đơn

- Ðịnh dạng (Escape sequence) - Một biến ký tự.

Chương trình sau đây sử dụng hàm putchar() để xuất các kí tự ra màn hình.

Ví dụ 1. 6:

#includ e<stdio .h>

main(){

char c; /*Biến kí tự*/

c = getchar(); /*Nhập giá trị cho biến kí tự c*/

putchar(c); /*Hiển thị nội dung biến kí tự c*/

putchar (‘B’); /*Hiển thị kí tự B*/

putchar(‘9’); /*Hiển thị con số 9*/

putchar(‘\t’); /*Chèn một khoảng tab*/

putchar(‘\n’); /*Dấu xuống dòng*/

}

Một phần của tài liệu giáo trình lập trình C (Trang 28 - 38)

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

(339 trang)
w