20
   Nh p và Xut trong C 71 Bài 6 Nhp và Xut trong C Mc tiêu:  K ế t thúc bài hc này, bn có thể :  Hiu các hàm nh p xut có định dng scanf() và printf()  S dng các hàm nh p xut ký t  getchar() và putchar(). Giớ i thiu Trong bt 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 tin nh p/xut chun (I / O). 2. Thông qua nhng t p tin. Trong phn này ta s nói v chc năng nh p và xut cơ  bn. Nh p và xut (I/O) luôn là các thành phn quan tr ng ca bt k  chươ ng trình nào. Рto tính hu ích, chươ ng trình ca bn cn có kh năng nh p d liu vào và hi n th li nhng k ết qu ca nó. Trong C, thư vin chun cung c p nhng th tc cho vi c nh p và xut. Thư vin chun có nhng hàm qun lý các thao tác nh p/xut cũng như các thao tác trên ký t  và chui. Trong bài hc này, tt c nhng hàm nh p dùng để đọc d liu vào t thiết b nh p chun và tt c nhng hàm xut dùng để viết k ết qu ra thi ết b xut chun. Thiết b nh p chun thông thườ ng là bàn phím. Thi ết b xut chun thông thườ ng là màn hình (console). Nh  p và xut ra có th đượ c định hướ ng đến t p tin hay t  t p tin thay vì thiết b chun. Nhng t  p tin có th đượ c lưu trên đĩ a hay trên bt c thi ết b l ưu tr  nào khác. D liu đầu ra cũng có th đượ c gi đến máy in. 6.1 Tp tin tiêu đề <stdio.h> Trong các ví d tr ướ c, ta đã tng viết dòng mã sau: #include <stdio.h> Ðây là lnh tin x (preprocessor command). Trong C chun, ký hiu #  nên đặt ti ct đầu tiên.  stdio.h mt t p tin đượ c gi là t p tin tiêu đề (header).  cha các macro cho nhiu hàm nh p và xut đượ c dùng trong C. Hàm printf(), scanf(), putchar()   getchar() đượ c thiết k ế theo cách gi các macro trong t  p tin stdio.h để thc thi các công vi c tươ ng ng. 6.2 Nhp và xut trong C (Input and Output) Thư vin chun trong C cung c p hai hàm để thc hin các yêu cu nh p và xut có định dng. Chúng là:  printf()   Hàm xut có định dng.  scanf() Hàm nh p có định dng.  Nhng hàm này gi là nhng hàm đượ c định dng vì chúng có th đọc và in d li u ra theo các định dng khác nhau đượ c điu khin bở i ngườ i dùng. B định dng qui định dng thc mà theo đó giá tr  ca biến s đượ c nh p vào và in ra.

Session 06 - Nhập và Xuất trong C – Lý thuyết

Embed Size (px)

Citation preview

Page 1: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 1/20

 

 

 Nhậ p và Xuất trong C 71 

Bài 6 Nhập và Xuất trong C

Mục tiêu:

 K ế t thúc bài học này, bạn có thể :

  Hiểu các hàm nhậ p xuất có định dạng scanf() và printf()

  Sử dụng các hàm nhậ p xuất ký tự getchar() và putchar().

Giớ i thiệu

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ầnquan 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ăngnhậ 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àmquả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 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ếtk ế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ẩnthô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 tinthay 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.

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

Trong các ví dụ tr ướ c, ta đã từng viết dòng mã sau:

#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 ế theocách gọi các macro trong tậ p tin stdio.h để thực thi các công việc tươ ng ứng.

6.2 Nhập và xuất trong C (Input and 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ó định dạng. Chú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.

Page 2: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 2/20

 

 

72 Lậ p trình cơ bản C 

6.2.1 printf()

Chúng ta đã quen thuộc vớ i hàm này qua các phần tr ướ c. Ở đây, chúng ta sẽ xem chúng chi tiết hơ n.

Hàm printf() đượ c dùng để hiển thị dữ liệu trên thiết bị xuất chuẩn – console (màn hình). Dạng mẫuchung của hàm này như sau:

printf(“control string”, argument list);

Danh sách tham số (argument list) bao gồm các hằng, biến, biểu thức hay hàm và đượ c phân cách bở idấu phẩy. Cần phải có một lệnh định dạng nằm trong chuỗi điều khiển (control string) cho mỗi

tham số trong danh sách. Những lệnh định dạng phải tươ ng ứng vớ i danh sách các tham số về số 

lượ ng, kiểu dữ liệu và thứ tự. Chuỗi điều khiển phải luôn đượ c đặt bên trong cặ p dấu nháy kép“”, đâylà dấu phân cách (delimiters). Chuỗi điều khiển chứa một hay nhiều hơ n ba thành phần dướ i đây :

  Ký tự văn bản (Text characters) – Bao gồm các ký tự có thể in ra đượ c và sẽ đượ c in giống như ta nhìn thấy. Các khoảng tr ắng thườ ng đượ c dùng trong việc phân chia các tr ườ ng (field) đượ c

xuất ra.

  Lệnh định dạng - Định ngh ĩ a cách thức các mục dữ liệu trong danh sách tham số sẽ đượ c hiểnthị. Một lệnh định dạng bắt đầu vớ i một ký hiệu % và theo sau là một mã định dạng tươ ng ứng chomục dữ liệu. Dấu % đượ c dùng trong hàm printf() để chỉ ra các đặc tả chuyển đổi. Các lệnh địnhdạng và các mục dữ liệu tươ ng thích nhau theo thứ tự và kiểu từ trái sang phải. Một mã định dạngthì cần thiết cho mọi mục dữ liệu cần in ra.

  Các ký tự không in đượ c – Bao gồm phím tab, dấu khoảng tr ắng và dấu xuống dòng.

Mỗi lệnh định dạng gồm một hay nhiều mã định dạng. Một mã định dạng bao gồm ký hiệu % và một bộ định kiểu. Bảng 6.1 liệt kê các mã định dạng khác nhau đượ c hỗ tr ợ bở i câu lệnh printf():

Ðịnh dạng printf() scanf()

Ký tự đơ n (Single Character) %c %c

Chuỗi (String) %s %s

Số nguyên có dấu (Signed decimal integer) %d %d

Số thậ p phân có dấu chấm động (Floating point) %f %f hoặc %e

Số thậ p phân có dấu chấm động - Biểu diễn phần thậ  p phân %lf %lf 

Số thậ p phân có dấu chấm động - Biểu diễn dạng số mũ %e %f hoặc %e

Số thậ p phân có dấu chấm động (%f hoặc %e, con số nào ít hơ n) %g

Số nguyên không dấu (Unsigned decimal integer) %u %u

Số thậ p lục phân không dấu (Dùng “ABCDEF”)

(Unsigned hexadecimal integer)

%x %x

Số bát phân không dấu (Unsigned octal integer) %o %o

Bảng 6.1: Mã định dạng trong printf ()

Trong bảng trên, c, d, f, lf, e, g, u, s, o và x là bộ định kiểu.

Các quy ướ c in cho các mã định dạng khác nhau đượ c tổng k ết trong Bảng 6.2:

Mã định dạng Quy ướ c in ấn

%d Các con số trong số nguyên.

Page 3: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 3/20

 

 

 Nhậ p và Xuất trong C 73 

%f Phần số nguyên của số sẽ đượ c in nguyên dạng. Phần thậ p phân sẽ chứa 6con số. Nếu phần thậ p phân của con số ít hơ n 6 số, nó sẽ đượ c thêm các số không (0) bên phải hay gọi là làm tròn phía bên phải.

%e Một con số bên trái dấu chấm thậ p phân và 6 con số bên phải giống như %f.

Bảng 6.2: Quy ướ c in

Bở i vì các ký hiệu %,\ và “ đượ c dùng đặc biệt trong chuỗi điều khiển, nếu chúng ta cần in các ký hiệunày lên màn hình, chúng phải đượ c dùng như trong Bảng 6.3:

\\ In ký tự  \ 

\ “ In ký tự “ 

%% In ký tự % 

Bảng 6.3: Các ký tự  đặc biệt trong chuỗi điều khiển

Bảng dướ i đây đưa ra vài ví dụ sử dụng chuỗi điều khiển và mã định dạng khác nhau.

Số Câu lệnhChuỗiđiều

khiển

Nội dung màchuỗi điều khiển

chứ a đự ng

Danhsách

tham số 

Giải thíchdanh sách

tham số 

Hiển thị trên

màn hình

1. printf(“%d”, 300); %d Chỉ chứa lệnhđịnh dạng

300 Hằng số 300

2. printf(“%d”, 10+5); %d Chỉ chứa lệnhđịnh dạng

10 + 5 Biểu thức 15

3. printf(“GoodMorning Mr. Lee.”);

GoodMorningMr. Lee.

Chỉ là các ký tự văn bản

Không có(Nil)

Không có Good MorningMr. Lee.

4. int count = 100; printf(“%d”, count);

%d Chỉ chứa lệnhđịnh dạng

Count Biến 100

5. printf(“\nhello”); \nhello Chỉ là các ký tự văn bản và ký tự không in đượ c.

Không có Không có Hello(Trên dòng mớ i)

6. #define str “GoodApple”……..

 printf(“%s”, str);

%s Chỉ chứa lệnhđịnh dạng

Str Hằng chuỗi Good Apple

7. ……..int count,stud_num;count = 0;

stud_num = 100;  printf(“%d %d\n”,count, stud_num);

%d %d Chỉ chứa lệnhđịnh dạng và trìnhtự thoát ra

count,stud_num

Hai biến 0, 100

Bảng 6.4 : Chuỗi điều khiển và mã định dạng

Ví dụ 6.1 :

Ðây là một chươ ng trình đơ n giản dùng minh họa cho một chuỗi có thể đượ c in theo lệnh định dạng.Chươ ng trình này cũng hiển thị một ký tự đơ n, số nguyên và số thực (a single character, integer, vàfloat).

#include <stdio.h>

void main()

Page 4: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 4/20

 

 

74 Lậ p trình cơ bản C 

{

int a = 10;

float b = 24.67892345;

char ch = ‘A’;

printf(“\nInteger data = %d”, a);printf(“\nFloat Data = %f”, b);

printf(“\nCharacter = %c”, ch);

printf(“\nThis prints the string”);

printf(“%s”, ”\nThis also prints a string”);

}

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

Integer data = 10

Float Data = 24.678923

Character = A

This prints the string

This also prints a string

  Bổ từ (Modifier) cho các lệnh định dạng trong printf()

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ìnhtự 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àicù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 ộnglà 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ẽ chok ế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ùngthê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 ự (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 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  float hay double 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ộtmụ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ỗiký 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.

Page 5: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 5/20

 

 

 Nhậ p và Xuất trong C 75 

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ùngmuố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’

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ã địnhdạ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ươ ngtrì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 ta hãy xem những bổ từ này hoạt động thế nào. Ðầu tiên, chúng ta xem xét tác động của nó đốivớ i những dữ liệu kiểu số nguyên.

Ví dụ 6.2:

/* Chương trình này trình bày cách dùng bổ từ trong printf() */

#include <stdio.h>

void main()

{

printf(“The number 555 in 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);

}

K ết quả như dướ i đây:

The number 555 in various forms:

Page 6: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 6/20

 

 

76 Lậ p trình cơ bản C 

Without any modifier:

[555]

With - modifier:

[555]

With digit string 10 as modifier:

[ 555]With 0 as modifier:

[555]

With 0 and digit string 10 as modifiers:

[0000000555]

With -, 0 and digit string 10 as modifiers:

[555 ]

Chúng ta đã dùng ký hiệu ‘[‘ và ‘]’ để chỉ ra nơ i tr ườ ng bắt đầu và nơ i k ết thúc. Khi chúng ta dùng%d mà không có bổ từ, chúng ta thấy r ằng nó dùng cho một tr ườ ng có cùng độ r ộng vớ i số nguyên.Khi dùng %10d chúng ta thấy r ằng nó dùng 10 khoảng tr ắng cho tr ườ ng và số đượ c canh lề phải theomặc định. Nếu ta dùng bổ từ –, số sẽ đượ c canh trái trong tr ườ ng đó. Nếu dùng bổ từ 0, chúng ta thấyr ằng số sẽ thêm vào 0 thay vì là khoảng tr ắng.

Bây giờ chúng ta hãy xem bổ từ dùng vớ i số thực.

Ví dụ 6.3:

/* Chương trình này trình bày cách dùng bổ từ 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 modifiers:\n”);

printf(“[%010.3f]\n”, 555.55);

printf(“In float form with -, 0 ”);

Page 7: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 7/20

 

 

 Nhậ p và Xuất trong C 77 

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 modifiers:\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);

}

K ết quả như sau:

The number 555.55 in various forms:

In float form without modifiers:

[555.550000]

In exponential form without any modifier:

[5.555500e+02]

In float form with - modifier:

[555.550000]

In float form with digit string 10.3 as modifier

[ 555.550]

In float form with 0 as modifier:

[555.550000]

In float form with 0 and digit string 10.3 as modifiers:

[000555.550]

In float form with -, 0 and digit string 10.3 as modifiers:

[555.550 ]

In exponential form with 0 and digit string 10.3 as modifiers:

[05.555e+02]

In exponential form with -,0 and digit string 10.3 as modifiers:

[5.555e+02]

Theo mặc định cho %f , chúng ta có thể thấy r ằng có 6 con số cho phần thậ p phân và mặc định cho %e 

là một con số tại phần nguyên và 6 con số phần bên phải dấu chấm thậ p phân. Chú ý cách thể hiện 2

Page 8: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 8/20

 

 

78 Lậ p trình cơ bản C 

số cuối cùng trong ví dụ trên, số các con số bên phải dấu chấm thậ p phân là 3, dẫn đến k ết quả khôngđượ c làm tròn.

Bây giờ , chúng ta hãy xem bổ từ dùng vớ i chuỗi số. Chú ý cách mở  r ộng tr ườ ng để chứa toàn bộ chuỗi. Hơ n nữa, chú ý cách đặc tả độ chính xác .4 trong việc giớ i hạn số ký tự đượ c in.

Ví dụ 6.4:

/* Chương trình trình bày cách dùng bổ từ với chuỗi*/

#include <stdio.h>

void main()

{

printf(“A string in various forms:\n”);

printf(“Without any format command:\n”);

printf(“Good day Mr. Lee. \n”);

printf(“With format command but without any modifier:\n”);

printf(“[%s]\n”, ”Good day Mr. Lee.”);

printf(“With digit string 4 as modifier:\n”);

printf(“[%4s]\n”, ”Good day Mr. Lee.”);

printf(“With digit string 19 as modifier: \n”);

printf(“[%19s]\n”, ”Good day Mr. Lee.”);

printf(“With digit string 23 as modifier: \n”);

printf(“[%23s]\n”, ”Good day Mr. Lee.”);

printf(“With digit string 25.4 as modifier: \n”);

printf(“[%25.4s]\n”, ”Good day Mr.Lee.”);

printf(“With – and digit string 25.4 as modifiers:\n”);

printf(“[%-25.4s]\n”, ”Good day Mr.shroff.”);

}

K ết quả như sau:

A string in various forms:

Without any format command:

Good day Mr. Lee.

With format command but without any modifier:

[Good day Mr. Lee.]

With digit string 4 as modifier:

[Good day Mr. Lee.]

Page 9: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 9/20

 

 

 Nhậ p và Xuất trong C 79 

With digit string 19 as modifier:

[ Good day Mr. Lee.]

With digit string 23 as modifier:

[ Good day Mr. Lee.]

With digit string 25.4 as modifier:

[ Good]

With - and digit string 25.4 as modifiers:

[Good ] 

 Những ký tự ta nhậ p tại bàn phím không đượ c lưu ở dạng các ký tự. Thật sự chúng lưu theo dạng các

số dướ i dạng mã ASCII (Bộ mã chuẩn Mỹ cho việc trao đổi thông tin - American Standard Codefor Information Interchange). Các giá tr ị của một biến đượ c thông dịch dướ i dạng ký tự hay một số tùy vào kiểu của biến đó. Ví dụ sau mô tả điều này:

Ví dụ 6.5:

#include <stdio.h>

void main()

{

int a = 80;

char b= ‘C’;

printf(“\nThis is the number stored in ‘a’ %d”,a);

printf(“\nThis is a character interpreted from ‘a’ %c”,a);

printf(“\nThis is also a character stored in ‘b’ %c”,b);

printf(“\nHey! The character of ‘b’ is printed as a number!

%d“, b);

}

K ết quả như dướ i đây:

This is the number stored in `a’ 80

This is a character interpreted from `a’ P

This is also a character stored in `b’ C

Hey! The character of `b' is printed as a number!67

K ết quả này mô tả việc dùng các đặc tả định dạng và việc thông dịch của mã ASCII. Mặc dù các biếna và b đã đượ c khai báo là các biến kiểu int và char , nhưng chúng đã đượ c in như là ký tự và số nhờ  vào việc dùng các bộ định dạng khác nhau. Ðặc điểm này của C giúp việc xử lý dữ liệu đượ c linh hoạt.

Page 10: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 10/20

 

 

80 Lậ p trình cơ bản C 

Khi dùng câu lệnh printf() để cho ra một chuỗi dài hơ n 80 ký tự trên một dòng, khi xuống dòng ta phải

ngắt mỗi dòng bở i ký hiệu \ như đượ c trình bày trong ví dụ dướ i đây:

Ví dụ 6.6:

/* Chương trình trình bày cách dùng một chuỗi dài các ký tự*/

#include <stdio.h>

void main()

{

printf(“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\aaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\aaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\aaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\aaaaaaaaaaaaaaaa

aaaaaaaaaaaaa”);

}

K ết quả như sau:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaa

Trong ví dụ trên, chuỗi trong câu lệnh printf() có 252 ký tự. Trong khi một dòng văn bản chứa 80 kýtự, do đó chuỗi đượ c mở r ộng thành 3 hàng trong k ết quả như trên.

6.2.2 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:

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âulệ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ố điểm khác biệt 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ữngcon 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ứa đự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ào 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 cơ bảnchar, int, float, double), không sử dụng & tr ướ c tên biến.

Page 11: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 11/20

 

 

 Nhậ p và Xuất trong C 81 

  Sự  khác nhau trong lệnh định dạng giữ a printf() và scanf() 

1.  Không có tùy chọn %g.

2.  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ỗicá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()

scanf() 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 dò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 dòng, miễn là chúng ta có ít nhấtmộ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ảngtr ắng và ranh giớ i hàng để thu đượ c dữ liệu.

Ví dụ 6.7:

Chươ ng trình sau mô tả việc dùng hàm scanf(). 

#include <stdio.h>

void main()

{

int a;

float d;

char ch, name[40];

printf(“Please enter the data\n”);

scanf(“%d %f %c %s”, &a, &d, &ch, name);

printf(“\nThe values accepted are: %d, %f, %c, %s”, a, d, ch,

name);

}

K ết quả như sau:Please enter the data

12 67.9 F MARK

The values accepted are:12, 67.900002, F, MARK

Dữ liệu đầu vào có thể là:12 67.9F MARK 

hoặc như:1267.9FMARK 

cũng đượ c nhận vào các biến a, d , ch, và name.

Xem ví dụ khác:

Page 12: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 12/20

 

 

82 Lậ p trình cơ bản C 

Ví dụ 6.8:

#include <stdio.h>

void main(){

int i;

float x;

char c;

.........

scanf(“%3d %5f %c”, &i, &x, &c);

}

 Nếu dữ liệu nhậ p vào là:21 10.345 F

Khi chươ ng trình đượ c thực thi, thì 21 sẽ gán tớ i i, 10.34 sẽ gán tớ i x và ký tự 5 sẽ đượ c gán cho c.Còn lại là đặc tính F sẽ bị bỏ qua.

Khi ta chỉ rõ một chiều r ộng tr ườ ng bên trong scanf(), thí dụ %10s, r ồi sau đó scanf() chỉ thu nhận tốiđa 10 ký tự hoặc tớ i ký tự khoảng tr ắng đầu tiên (bất cứ ký tự nào đầu tiên). Ðiều này cũng áp dụngcho các kiểu int , float và double.

Ví dụ dướ i đây mô tả việc sử dụng hàm scanf() để nhậ p vào một chuỗi gồm có những ký tự viết hoa vàkhoảng tr ắng. Chuỗi sẽ có chiều dài không xác định nhưng nó bị giớ i hạn trong 79 ký tự (thật ra, 80 kýtự bao gồm ký tự tr ống (null) đượ c thêm vào nơ i cuối chuỗi).

Ví dụ 6.9:

#include <stdio.h>

void main()

{

char line[80]; /* line[80] là một mảng lưu 80 ký tự */

..........

scanf(“%[ ABCDEFGHIJKLMNOPQRSTUVWXYZ]”, line);

..........

}

Mã khuôn dạng %[] có ngh ĩ a những ký tự đượ c định ngh ĩ a bên trong [] có thể đượ c chấ p nhận như những ký tự chuỗi hợ  p lệ. Nếu chuỗi BEIJING CITY đượ c nhậ  p vào từ thiết bị nhậ  p chuẩn, khichươ ng trình đượ c thực thi, toàn bộ chuỗi sẽ đượ c gán cho mảng một khi chuỗi chỉ toàn là ký tự viếthoa và khoảng tr ắng. Nếu chuỗi đượ c viết là Beijing city, chỉ ký tự đơ n B đượ c gán cho mảng, khi đóthì ký tự viết thườ ng đầu tiên (trong tr ườ ng hợ  p này là ‘e’) đượ c thông dịch như ký tự đầu tiên bênngoài chuỗi.

Ðể chấ p nhận bất k ỳ ký tự nào đến khi gặ p ký tự xuống dòng, chúng ta sử dụng mã định dạng %[^\n],điều này ngụ ý r ằng chuỗi đó sẽ chấ p nhận bất k ỳ ký tự nào tr ừ “\n” (ký tự xuống dòng). Dấu mũ (^)ngụ ý r ằng tất cả các ký tự tr ừ những ký tự nằm sau dấu mũ đó sẽ đượ c chấ p nhận như ký tự hợ  p lệ.

Ví dụ 6.10:

#include <stdio.h>

Page 13: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 13/20

 

 

 Nhậ p và Xuất trong C 83 

void main()

{

char line[80];

……………..

scanf(“%[^\n]”, line);

………..

}

Khi hàm scanf() đượ c thực thi, một chuỗi có chiều dài không xác định (nhưng không quá 79 ký tự) sẽ đượ c nhậ p vào từ thiết bị nhậ p chuẩn và đượ c gán cho mảng. Sẽ không có giớ i hạn nào trên các ký tự của chuỗi, ngoại tr ừ tất cả chúng chỉ nằm trên một hàng. Ví dụ chuỗi sau:

All’s well that ends well!

Có thể đượ c nhậ p vào từ bàn phím và đượ c gán cho mảng.

Bổ từ * cho k ết quả khác nhau trong scanf(). Dấu * đượ c dùng để chỉ r ằng một tr ườ ng sẽ đượ c bỏ qua

luôn hay tạm bỏ qua.

Ví dụ xét chươ ng trình:

#include <stdio.h>

void main()

{

char item[20];

int partno;

float cost;

.........

scanf(“%s %*d %f”, item, &partno, &cost);.........

}

 Nếu các mục dữ liệu tươ ng ứng là:

battery 12345 0.05

thì battery sẽ đượ c gán cho item và 0.05 sẽ đượ c gán cho cost  nhưng 12345 sẽ không đượ c gán cho partno bở i vì dấu * ngăn chặn việc gán.

Bất cứ ký tự khác trong scanf() mà không là mã định dạng trong chuỗi điều khiển phải đượ c nhậ p vàochính xác nếu không sẽ phát sinh lỗi. Ðặc điểm này đượ c dùng để chấ p nhận dấu phân cách phẩy (,).

Ví dụ chuỗi dữ liệu

10, 15, 17

và lệnh nhậ p vào

scanf(“%d, %f, %c”, &intgr, &flt, &ch);

Chú ý r ằng dấu phẩy trong chuỗi chuyển đổi tươ ng ứng dấu phẩy trong chuỗi nhậ p và vì vậy nó sẽ có

chức năng như dấu phân cách.

Page 14: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 14/20

 

 

84 Lậ p trình cơ bản C 

Ký tự khoảng tr ắng trong chuỗi điều khiển thườ ng đượ c bỏ qua mặc dù nó sẽ phát sinh tr ở ngại khi

dùng vớ i mã định dạng %c. Nếu chúng ta dùng bộ định dạng %c thì một khoảng tr ắng đượ c xem như làmột ký tự hợ  p lệ.

Xét đoạn mã sau:

int x, y;

char ch;

scanf(“%2d %c %d”,&x, &ch, &y);

printf(“%d %d %d\n”,x, ch, y);

ta nhậ p vào:

14 c 5

14 sẽ đượ c gán cho x, ký tự ch nhận ký tự khoảng tr ắng (số 32 trong hệ thậ p phân), do vậy y đượ cgán giá tr ị của ký tự ‘c’ tức là số 99 trong hệ thậ p phân.

Xét đoạn mã sau:

#include <stdio.h>

void main()

{

char c1, c2, c3;

…………..

scanf(“%c%c%c”,&c1, &c2, &c3);

………………..

}

 Nếu dữ liệu nhậ p vào là: 

a b c

(vớ i khoảng tr ắng giữa các ký tự), thì k ết quả của phép gán:

c1 = a, c2 = <Khoảng trắng>, c3 = b

Ở đây chúng ta có thể thấy c2 chứa một khoảng tr ắng vì chuỗi nhậ p có chứa ký tự khoảng tr ắng. Ðể  bỏ qua các ký tự khoảng tr ắng này và đọc ký tự tiế p theo không phải là ký tự khoảng tr ắng, ta nên

dùng tậ p chuyển đổi %1s.

scanf(“%c%1s%1s”,&c1, &c2, &c3);

Khi đó k ết quả sẽ khác đi vớ i cùng dữ liệu nhậ p vào như tr ướ c và k ết quả đúng như ý định của ta: c1 = a, c2 = b, c3 = c

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

Page 15: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 15/20

 

 

 Nhậ p và Xuất trong C 85 

 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. Thư viện hàm C chứa một hệ thống hàmriêng mà nó điều khiển các thao tác này. Ðó 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ểnthiế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ườ idù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ươ ngtrì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.Chúng ta sẽ nói về Thiết bị nhập/xuất.

Trong C, Thiết bị nhập/xuất chuẩn là một thiết bị luồng. Các hàm trong Thiết bị nhậ p/xuất chuẩnhướ ng các thao tác đến thiết bị nhậ p và xuất chuẩn của hệ thống.

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.

  putchar() – Xuất một ký tự đơ n ra màn hình.

6.3.1 getchar()

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.Tronghầ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ùngnhấ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. Nó đơ n giản lấy về ký tự tiế p theo và sẵn sàng đưa racho 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ự. 

Chươ ng trình sau trình bày cách dùng hàm getchar().

Ví dụ 6.11:

/* Chương trình trình bày cách dùng getchar() */

#include <stdio.h>

void main()

{

char letter;

printf(“\nPlease enter any character: “);

letter = getchar();

printf(“\nThe character entered by you is %c. “, letter);

}

K ết quả như sau:

Page 16: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 16/20

 

 

86 Lậ p trình cơ bản C 

Please enter any character: S

The character entered by you is S.

Trong chươ ng trình trên ‘letter’ là một biến đượ c khai báo là kiểu char do vậy nó sẽ nhận vào ký tự.

Một thông báo:

Please enter any character:

sẽ xuất hiện trên màn hình. Ta nhậ p vào một ký tự, trong ví dụ là S, qua bàn phím và nhấn Enter. Hàm getchar() nhận ký tự đó và gán cho biến có tên là letter . Sau đó nó đượ c hiển thị trên màn hình và tacó đượ c thông báo.

The character entered by you is S.

6.3.2 putchar() 

 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ự.

 Nếu tham số là một hằng nó phải đượ c bao đóng trong dấu nháy đơ n. Bảng 6.5 trình bày vài tùy chọncho putchar() và tác động của chúng.

Tham số Hàm Tác dụng

Biến ký tự putchar(c) Hiện thị nội dung của biến ký tự c

Hằng biến ký tự putchar(‘A’) Hiển thị ký tự A

Hằng số putchar(‘5’) Hiển thị con số 5

Ðịnh dạng (escape

sequence)

 putchar(‘\t’) Chèn một ký tự khoảng

cách (tab) tại vị trí con tr ỏ màn hình

Ðịnh dạng (escapesequence)

 putchar(‘\n’) Chèn một mã xuống dòngtại vị trí con tr ỏ màn hình

Bảng 6.5: Nhữ ng tùy chọn cho putchar() và tác dụng của chúng Chươ ng trình sau trình bày về hàm putchar():

Page 17: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 17/20

 

 

 Nhậ p và Xuất trong C 87 

Ví dụ 6.12:

/* Chương trình này trình bày việc sử dụng hằng và định dạng tronghàm putchar() */

#include <stdio.h>

void main()

{

putchar(‘H’); putchar(‘\n’);

putchar(‘\t’);

putchar(‘E’); putchar(‘\n’);

putchar(‘\t’); putchar(‘\t’);

putchar(‘L’); putchar(‘\n’);

putchar(‘\t’); putchar(‘\t’); putchar(‘\t’);

putchar(‘L’); putchar(‘\n’);

putchar(‘\t’); putchar(‘\t’); putchar(‘\t’);

putchar(‘\t’);

putchar(‘O’);

}

K ết quả như sau:

H

E

L

L

O

Khác nhau giữa getchar() và  putchar() là putchar() yêu cầu một tham số trong khi getchar() thì không.

Ví dụ 6.13:

/* Chương trình trình bày getchar() và putchar() */#include <stdio.h>

void main()

{

char letter;

printf(“You can enter a character now: ”);

letter = getchar();putchar(letter);

}

K ết quả như sau:

You can enter a character now: F

F

Page 18: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 18/20

 

 

88 Lậ p trình cơ bản C 

Tóm tắt bài học

  Trong C, Nhậ p và Xuất đượ c thực hiện bằng cách dùng các hàm. Bất cứ chươ ng trình nào trong Cđều có quyền truy cậ p tớ i ba tậ p tin chuẩn. Chúng là tậ p tin nhậ p chuẩn (stdin), tậ p tin xuất chuẩn(stdout) và bộ lỗi chuẩn (stderr). Thông thườ ng tậ p tin nhậ p chuẩn là bàn phím (keyboard), tậ p

tin xuất chuẩn là màn hình (screen) và tậ p tin lỗi chuẩn cũng là màn hình.

  Tậ  p tin tiêu đề <stdio.h> chứa các macro của nhiều hàm nhậ  p và xuất (input/output function)

đượ c dùng trong C.

  Thiết bị nhập/xuất chuẩn (Console I/O) liên quan đến những hoạt động của bàn phím và mànhình của máy tính. Nó chứa các hàm định dạng và không định dạng.

  Hàm nhậ p xuất định dạng là printf() và scanf(). 

  Hàm nhậ p xuất không định dạng là getchar() và putchar().

  Hàm scanf() đượ c dùng cho dữ liệu nhậ p vào có định dạng, trong khi hàm  printf() đượ c dùng để xuất ra dữ liệu theo một định dạng cụ thể.

  Chuỗi điều khiển của printf() và scanf() phải luôn tồn tại bên trong dấu nháy kép “”. Chuỗi này sẽ chứa một tậ p các lệnh định dạng. Mỗi lệnh định dạng chứa ký hiệu %, một tùy chọn các bổ từ vàcác dạng kiểu dữ liệu xác định.

  Sự khác nhau chính giữa printf() và scanf() là hàm scanf() dùng địa chỉ của biến chứ không phải làtên biến.

  Hàm getchar() đọc một ký tự từ bàn phím.

  Hàm putchar(ch) gở i ký tự ch ra màn hình.

  Sự khác nhau giữa  getchar() và  putchar() là  putchar() có một tham số trong khi  getchar() thìkhông.

Page 19: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 19/20

 

 

 Nhậ p và Xuất trong C 89 

Kiểm tra tiến độ học tập

1.  Các hàm nhậ p và xuất có định dạng là _________ và ________.

A. printf() và scanf() B. getchar() và putchar() C. puts() và gets() D. Không câu nào đúng

2.  Hàm scanf() dùng _________ tớ i các biến chứ không dùng tên biến.

A. Hàm B. Con tr ỏ 

C. Mảng D. Không câu nào đúng

3.   ___________ xác định định dạng cho các giá tr ị của biến sẽ đượ c nhậ p và in. 

A. Văn bản B. Bộ định dạngC. Tham số D. Không câu nào đúng

4.   _______ đượ c dùng bở i hàm printf() để xác định các đặc tả chuyển đổi. 

A. % B. &

C. * D. Không câu nào đúng

5.   getchar() là một hàm không có bất cứ tham số nào. (True/False) 

6.  Một ___________ là một nơ i lưu tr ữ tạm trong bộ nhớ .

A. ROM (Bộ nhớ chỉ đọc) B. Thanh ghi

C. Vùng đệm D. Không câu nào đúng

7.  Ðịnh dạng (Escape sequence) có thể đượ c đặt bên ngoài chuỗi điều khiển của printf().

(True/False) 

Page 20: Session 06 - Nhập và Xuất trong C – Lý thuyết

5/9/2018 Session 06 - Nhâ ̣p và Xuâ ́t trong C – Lý thuyê ́t - slidepdf.com

http://slidepdf.com/reader/full/session-06-nhap-va-xuat-trong-c-ly-thuyet 20/20

 

 

90 Lậ p trình cơ bản C 

Bài tập tự làm

1. A. Hãy dùng câu lệnh printf() để :

a)  Xuất ra giá tr ị của biến số nguyên sum. 

 b)  Xuất ra chuỗi văn bản "Welcome", tiế p theo là một dòng mớ i.

c)  Xuất ra biến ký tự letter .

d)  Xuất ra biến số thực discount .

e)  Xuất ra biến số thực dump có 2 vị trí phần thậ p phân.

1. B. Dùng câu lệnh scanf() và thực hiện:

a) Ðọc giá tr ị thậ p phân từ bàn phím vào biến số nguyên sum. 

 b) Ðọc một giá tr ị số thực vào biến discount_rate.2  Viết một chươ ng trình xuất ra giá tr ị ASCII của các ký tự ‘A’ và ‘b’.

3.  Xét chươ ng trình sau:

#include <stdio.h>

void main()

{

int breadth;

float length, height;

scanf(“%d%f%6.2f”, breadth, &length, height);

printf(“%d %f %e”, &breadth, length, height);

}

Sửa lỗi chươ ng trình trên.

4.  Viết một chươ ng trình nhậ p vào name, basic, daper (phần tr ăm của D.A), bonper (phần tr ăm lợ itức) và loandet (tiền vay bị khấu tr ừ) cho một nhân viên. Tính lươ ng như sau:

salary = basic + basic * daper/100 + bonper * basic/100 - loandet

Bảng dữ liệu:

name basic daper bonper loandet

MARK 2500 55 33.33 250.00

Tính salary và xuất ra k ết quả dướ i các đầu đề sau (Lươ ng đượ c in ra gần dấu đôla ($)):

Name Basic Salary

Viết một chươ ng trình yêu cầu nhậ p vào tên, họ của bạn và sau đó xuất ra tên, họ theo dạng là họ, tên.