PDA

View Full Version : Lư thuyết " Giáo tŕnh ngôn ngữ C Aptech"(Nhập xuất trong c - Lư thuyết)


x9nd
05-09-2009, 10:33 PM
Bài 6 : Nhập và xuất trong C

Giới thiệu :

- Trong bất kỳ ngôn ngữ lập tŕ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:
+ Thông qua phương tiện nhập xuất chuẩn (I/O)
+ 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 tŕnh nào. Để tạo tính hữu ích, chương tŕ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 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 bài học này, tất cả những hàm 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 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.

1.Tập tin tiêu đề <stdio.h>

- Trong các ví dụ trước, ta từng viết ḍng mă sau:

Code:

#include <stdio.h>

- Đây là lệnh tiền xử lư (preprocessor command). Trong C chuẩn, kư hiệu # nên đặt tại cột đầu tiên. stdio.h là một tập tin và được gọi là tập tin tiêu đề (header). Nó chứa các macro cho nhiều hàm nhập và xuất được dùng trong C. Hàm printf(), scanf(), putchar() và getchar() được thiết kế theo cách gọi các macro trong tập tin stdio.h để thực thi các công việc tương ứng.

2.Nhập xuất trong C (input anh output)

- 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ó đinh dạng. Chúng là:

Code:

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.

3.printf()

- Cấu trúc câu lệnh:

Code:

printf(“control string”, argument list);

- Trong đó control string bao gồm những kư tự văn bản và các lệnh định dạng. Các kư tự dấu trắng, phím tab và dấu xuống ḍng không in được. Dưới đây bảng mă định dạng của printf(), quy ước in và các kư tự đặc biệt trong chuỗi điều khiển.

<picture>

- Bổ từ (modifier) cho các lệnh định dạng trong printf()
+ 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 trường dữ liệu có độ rộng nhỏ hơn sẽ cho canh phải trong kết quả của 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 thêm những vị trí cho đủ yêu cầu.
+ Bổ từ xác định độ chính xác : chúng có thể được dùng với kiểu float, double hay char array, string. 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 xử 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 float hay double vượt quá độ rộng con số chỉ trong bổ từ, th́ số đó sẽ được làm tṛ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 dưới. Một vài số "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ự.
-> 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ừ "1" : 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 integer. 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 tŕnh xác định nó. Nhưng khi đi với bổ từ này, một tham số đựoc yêu cầu phải chỉ ra rộng trường cụ thể. Dưới đây là một vài ví dụ về bổ từ...

Ví dụ 1 :

Code:

/*Chuong trinh nay trinh bay cach dung bo tu trong printf()*/
#include <stdio.h>

void main()
{
printf("The number 555 is various forms: \n");
printf("Without any modifier: \n");
printf("[%d] \n", 555);
printf("With - modifier: \n");
printf("[%-d] \n", 555);
printf("With digit string 10 as modifier: \n");
printf("[%10d] \n", 555);
printf("With 0 as modifier: \n");
printf("[%0d] \n", 555);
printf("With 0 and digit string 10 as modifiers: \n");
printf("[%010d] \n", 555);
printf("With -, 0 and digit string 10 as modifiers: \n");
printf("[%-010d] \n", 555);
}

Ví dụ 2 :

Code:

/*Chuong trinh nay trinh bay cach dung bo tu trong printf()*/
#include <stdio.h>
void main()
{
printf("The number 555.55 in various forms: \n");
printf("In float form without modifiers: \n");
printf("[%f] \n", 555.55);
printf("In exponential form without any modifier: \n");
printf("[%e] \n", 555.55);
printf("In float form with - modifier: \n");
printf("[%-f] \n", 555.55);
printf("In float form with digit string 10.3 as modifier \n");
printf("[%10.3f] \n", 555.55);
printf("In float form with 0 as modifier: \n");
printf("[%0f] \n", 555.55);
printf("In float form with 0 and digit string 10.3");
printf("as modifier: \n");
printf("[%010.3f] \n", 555.55);
printf("In float form with -, 0");
printf("and digit string 10.3 as modifiers: \n");
printf("[%-010.3f] \n", 555.55);
printf("In exponential form with 0");
printf("and digit string 10.3 as modifier: \n");
printf("[%010.3e] \n", 555.55);
printf("In exponential form with -, 0");
printf(" and digit string 10.3 as modifiers: \n");
printf("[%-010.3e] \n\n", 555.55);
}

4. scanf()

- Hàm scanf() được sử dụng để nhập dữ liệu. Khuôn dạng chung của hàm scanf() như sau:

Code:

scanf("Chuỗi các định dạng","Danh sách các tham số");

- Định dạng được sử dụng bên trong câu lệnh printf() cũng được sử dụng cùng cú pháp trong các câu lệnh scanf(). Những lệnh định dạng, bao gồm bổ từ và danh sách tham số được bàn luận cho printf() th́ cũng hợp lệ cho scanf(), chúng tuân theo một số đặc điểm sau:
+ Sự khác nhau trong danh sách tham số giữa printf() và scanf(): Hàm printf() dùng các tên biến, hằng số, hằng chuỗi và các biểu thức, nhưng scanf() sử dụng những con trỏ tới các biến. Một con trỏ tới một biến là một mục dữ liệu chức đựng địa chỉ của nơi mà biến được cất giữ trong bộ nhớ. Những con trỏ sẽ được bàn luận chi tiết ở chương sau. Khi sử dụng scanf() cần tuân theo những quy tắc cho danh sách tham số:
-> Nếu ta muốn nhập giá trị cho một biến có kiểu dữ liệu cơ bản, gơ và tên biến cùng với kư hiệu & trước nó.
-> Khi nhập giá trị cho một biến thuộc kiểu dữ liệu dẫn xuất (không phải thuộc bốn kiểu dữ liệu cơ bản char, int, float, double), không sử dụng & trước tên biến.
+ Sự khác nhau trong lệnh định dạng giữa printf() và scanf(): Không có tùy chọn %g. Mă định dạng %f và %e có cũng hiệu quả tác động. Cả hai nhận một kư hiệu tùy chọn, một chuỗi các con số có hay không có dấu chấm thập phân và một trường số mũ tùy chọn.
- Cách thức hoạt động của scanf(): nó sử dụng những kư tự không được in như kư tự khoảng trắng, kư tự phân cách (tab), kư tự xuống ḍng để quyết định khi nào một trường nhập kết thúc và bắt đầu. Có sự tương ứng giữa lệnh định dạng với những trường trong danh sách tham số theo một thứ tự xác định, bỏ qua những kư tự khoảng trắng bên trong. Do đó, đầu vào có thể được trải ra hơn một ḍng, miễn là chúng ta có it nhất một kư tự phân cách, khoảng trắng hay hàng mới giữa các trường nhập vào. Nó bỏ qua những khoảng trắng và ranh giới hàng để thu được dữ liệu.

Ví dụ 1:

Code:

/*Chuong trinh mo ta viec dung ham scanf()*/

#include <stdio.h>
void main()
{
int a;
float d;
char ch, name[40];
printf("Please enter the date \n");
scanf("%d %f %c %s", &a, &d, &ch, name);
printf("\nThe values accepted are: %d, %f, %c, %s", a, d, ch, name);
}

Ví dụ 2:

Code:

/*Chuong trinh mo ta viec dung ham scanf()*/

#include <stdio.h>

void main()
{
char line[80]; /*line[80] la mot mang luu 80 ky tu, mang chung ta se noi toi sau*/
scanf("% [ABCDEFGHIJMNOPQRSTUVWXYZ]", line);
}

(thiếu mất một ít đọc phần sau nhé, bài dài quá:monkey93::monkey93:)