Hàm getch, getche nhập 1 ký tự Hàm scanf – Tài liệu text

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.34 MB, 95 trang )

Giáo trình tin học cơ sở II – N
gụn ng
C
33
Cỏc chú thích được đặt giữa cặp và , có thể trên một hoặc nhiều dòng. Với các chương trình dịch của C++ bạn có thể sử dụng để ghi một chú thích trong chương trình,
với cách này nội dung lời chú thích bắt đầu sau dấu tới hết dòng. Các lời chú thích chỉ có tác dụng với người đọc chứ khơng ảnh hưởng tới chương
trình, tức là chương trình dịch sẽ bỏ qua các lời chú thích. Ví dụ:
scanff,r;
nhập số thực từ bàn phím vào r
printfDien tich = 5.2f, rrPI;
tính và in diện tích
III.3.
Nhập và xuất dữ liệu
Trong phần này chúng ta giới thiệu cú pháp và ý nghĩa một số hàm cơ bản để nhập dữ liệu từ thiết bị vào chuẩn là bàn phím và xuất dữ liệu ra màn hình máy tính. Để sử dụng
các hàm nói chung của thư viện bạn phải bao hàm các tệp tiêu đề tệp .h chứa khai báo nguyên mẫu của chúng vào chương trình.
¾ Một số hàm nhập dữ liệu từ bàn phím

a. Hàm getch, getche nhập 1 ký tự

Cú pháp:
int getch;
int getche;
Chức năng: Hai hàm này thực hiện đợi người dùng nhập một ký tự từ bàn phím và trả về một số nguyên là mã của kí tự được bấm, ví dụ bạn gõ phím ‘a’ thì hàm sẽ trả về 97.
Sự khác nhau giữa hai hàm là hàm getche hiện kí tự được nhập lên màn hình, còn getch thì khơng.
Khi phím được bấm là phím mở rộng thì hệ thống sẽ đẩy vào bộ đệm nhập liệu 2 byte, byte thứ nhất có giá trị 0, byte thứ 2 là mã mở rộng của phím đó. Ví dụ khi bạn bấm phím
mũi tên lên ↑ thì hai byte có giá trị là 0 72 và hàm getch hay getche trả về 0, byte có giá
trị 72 vẫn còn lưu trong bộ đệm nhập liệu, nếu ta gọi getch hoặc getche sẽ nhận được giá trị này.

b. Hàm scanf

Đây là một trong những hàm nhập dữ liệu phổ biến nhất của C, nó cho phép nhập
nhiều loại dữ liệu có các kiểu khác nhau. Khi nhập dữ liệu bằng hàm này bạn phải xác định địa chỉ vùng nhớ, hay biến để lưu dữ liệu và kiểu của dữ liệu cần nhp.
cỳ phỏp int
scanfconst char format, ds_cỏc_con_tr;
chc nng
Giáo trình tin häc c¬ së II – N
gơn ngữ
C
34
Hàm scanf cho phép chúng ta nhập dữ liệu từ bàn phím theo khn dạng được xác
định bởi xâu kí tự format, dữ liệu nhập vào sẽ lưu vào các biến hoặc vùng nhớ có địa chỉ tương ứng là các con trỏ trong ds_các_con_trỏ có thể có nhiều con trỏ, mỗi con trỏ cách
nhau bởi dấu phẩy.
Ví dụ: nhập giá trị cho 3 biến a có kiểu int, x có kiểu float, và b có kiểu int
Trong cú pháp trên format là một xâu quy định quy cách dữ liệu cần nhập, gồm nhiều đặc tả dữ liệu tương ứng với các kiểu của con trỏ trong phần ds_các_con_trỏ, có bao
nhiêu con trỏ thì cần đúng bấy nhiêu đặc tả, đặc tả thứ nhất quy định khuôn dạng dữ liệu cho con trỏ thứ nhất, đặc tả thứ 2 quy định khuôn dạng dữ liệu cho con trỏ thứ 2,…
Mỗi đặc tả bắt đầu bằng dấu có dạng sau
các thành phần trong [] là tuỳ chọn
:
[][n]ký_tự_định_kiểu Trong đó
– n là một số nguyên dương quy định độ dài tối đa tính theo số kí tự được nhập
cho thành phần tương ứng
– ký_tự_định_kiểu là kí tự quy định kiểu dữ liệu cần nhập ví dụ bạn muốn nhập số ngun kiểu int thì kí tự định kiểu là d, kiểu ký tự là c. Các kí tự định kiểu khác
bạn xem bảng sau.
Kí tự định kiểu
dữ liệu nhập kiểu con trỏ của đối nhập liệu
d integer
int arg D, ld
integer long arg
e, E Float
float arg f
Float float
arg g, G
Float float arg
o Octal
int arg O
Octal long arg
i Decimal,octal,
hex int
arg I
Decimal,octal, hex long arg
Giáo trình tin học c¬ së II – N
gơn ngữ
C
35
u Unsigned int
unsigned int arg U
Unsigned int unsigned long arg
x Hexadecimal
int arg
X Hexadecimal
int arg
s Character string char arg[]
c Character char arg
– đây cũng là thành phần tuỳ chọn, nếu có thì tác dụng của nó là sẽ bỏ qua một thành phần dữ liệu được xác định bởi đặc tả này, như vậy sẽ khơng có đối tương
ứng với đặc tả này. Ví dụ:
scanf“dcd”,a,b; trong dòng này chúng ta sẽ nhập 1 thành phần gọi là 1 trường số nguyên vào a,
sau đó bỏ qua một thành phần là kí tự, và tiếp theo là một số nguyên vào b.
• Quy cách nhập dữ liệu
Khi chúng ta nhập dữ liệu từ bàn phím, kết thúc nhập bằng Enter ↵, thì tất cả
những kí tự chúng ta gõ trên bàn phím đều được lưu trong vùng đệm nhập dữ liệu gọi là dòng vào- stdin – dòng vào kết thúc bởi
↵, dữ liệu trên dòng vào này sẽ được cắt thành từng trường tuần tự từ trái qua phải và gán vào các biến hoặc vùng nhớ xác
định tương ứng bởi các con trỏ, các phần đã tách được sẽ bị loại khỏi dòng vào. Trước khi tách giá trị một trường thì các khoảng trắng phía trước của trường nếu có
sẽ bị loại bỏ. Nếu trong đặc tả khơng có thành phần n quy định độ dài tối đa một trường thì các trường được xác định bởi các ký tự dấu cách, tab, enter gọi chung là
khoảng trắng ký hiệu là hoặc khi gặp ký tự không phù hợp với đặc tả hiện tại.
Nếu trên dòng vào có nhiều hơn các thành phần yêu cầu của hàm nhập thì các thành phần chưa được nhận vẫn còn lưu trên dòng vào.
Ví dụ: int a,b; float x;
scanf“ddf”,a,b, x; với dòng vào là:
143 535 34

thì :
– khoảng trắng đầu tiên bị loại bỏ, 143 là trường thứ nhất được gán vào a, – hai khoảng trắng bị loại bỏ, 535 là trường thứ hai được gán vào b,
– một khoảng trắng bị loại bỏ, 34 được gán vào x cũn li
trong dũng vo
Giáo trình tin học cơ sở II – N
gơn ngữ
C
36
Nếu trong đặc tả có thành phần xác định độ rộng tối đa n thì một trường sẽ kết thúc hoặc khi gặp khoảng trống, hay kí tự khơng phù hợp hoặc đã đủ độ dài n
Ví dụ
int a,b; float x; scanf“d2d3f”,a,b, x;
với dòng vào là:
143 537 34

thì :
– khoảng trắng đầu tiên bị loại bỏ, 143 là trường thứ nhất được gán vào a, – hai khoảng trắng bị loại bỏ, 53 là trường thứ hai được gán vào b,
– một khoảng trắng bị loại bỏ, 7 được gán vào x còn lại 34
↵ trong dòng vào
Lưu ý:
– Số các đặc tả phải tương ứng với số con trỏ trong danh sách con trỏ – Ký tự định kiểu trong đặc tả phải phù hợp với kiểu của con trỏ cần nhập liệu.
– Dữ liệu nhập từ bàn phím phải phù hợp với các đặc tả. – Hàm scanf trả về số nguyên là số trường được nhập dữ liệu

c. Hàm gets

Cú pháp:int getch;int getche;Chức năng: Hai hàm này thực hiện đợi người dùng nhập một ký tự từ bàn phím và trả về một số nguyên là mã của kí tự được bấm, ví dụ bạn gõ phím ‘a’ thì hàm sẽ trả về 97.Sự khác nhau giữa hai hàm là hàm getche hiện kí tự được nhập lên màn hình, còn getch thì khơng.Khi phím được bấm là phím mở rộng thì hệ thống sẽ đẩy vào bộ đệm nhập liệu 2 byte, byte thứ nhất có giá trị 0, byte thứ 2 là mã mở rộng của phím đó. Ví dụ khi bạn bấm phímmũi tên lên ↑ thì hai byte có giá trị là 0 72 và hàm getch hay getche trả về 0, byte có giátrị 72 vẫn còn lưu trong bộ đệm nhập liệu, nếu ta gọi getch hoặc getche sẽ nhận được giá trị này.Đây là một trong những hàm nhập dữ liệu phổ biến nhất của C, nó cho phép nhậpnhiều loại dữ liệu có các kiểu khác nhau. Khi nhập dữ liệu bằng hàm này bạn phải xác định địa chỉ vùng nhớ, hay biến để lưu dữ liệu và kiểu của dữ liệu cần nhp.cỳ phỏp intscanfconst char format, ds_cỏc_con_tr;chc nngGiáo trình tin häc c¬ së II – Ngơn ngữ34Hàm scanf cho phép chúng ta nhập dữ liệu từ bàn phím theo khn dạng được xácđịnh bởi xâu kí tự format, dữ liệu nhập vào sẽ lưu vào các biến hoặc vùng nhớ có địa chỉ tương ứng là các con trỏ trong ds_các_con_trỏ có thể có nhiều con trỏ, mỗi con trỏ cáchnhau bởi dấu phẩy.Ví dụ: nhập giá trị cho 3 biến a có kiểu int, x có kiểu float, và b có kiểu intTrong cú pháp trên format là một xâu quy định quy cách dữ liệu cần nhập, gồm nhiều đặc tả dữ liệu tương ứng với các kiểu của con trỏ trong phần ds_các_con_trỏ, có baonhiêu con trỏ thì cần đúng bấy nhiêu đặc tả, đặc tả thứ nhất quy định khuôn dạng dữ liệu cho con trỏ thứ nhất, đặc tả thứ 2 quy định khuôn dạng dữ liệu cho con trỏ thứ 2,…Mỗi đặc tả bắt đầu bằng dấu có dạng saucác thành phần trong [] là tuỳ chọn[][n]ký_tự_định_kiểu Trong đó- n là một số nguyên dương quy định độ dài tối đa tính theo số kí tự được nhậpcho thành phần tương ứng- ký_tự_định_kiểu là kí tự quy định kiểu dữ liệu cần nhập ví dụ bạn muốn nhập số ngun kiểu int thì kí tự định kiểu là d, kiểu ký tự là c. Các kí tự định kiểu khácbạn xem bảng sau.Kí tự định kiểudữ liệu nhập kiểu con trỏ của đối nhập liệud integerint arg D, ldinteger long arge, E Floatfloat arg fFloat floatarg g, GFloat float argo Octalint arg OOctal long argi Decimal,octal,hex intarg IDecimal,octal, hex long argGiáo trình tin học c¬ së II – Ngơn ngữ35u Unsigned intunsigned int arg UUnsigned int unsigned long argx Hexadecimalint argX Hexadecimalint args Character string char arg[]c Character char arg- đây cũng là thành phần tuỳ chọn, nếu có thì tác dụng của nó là sẽ bỏ qua một thành phần dữ liệu được xác định bởi đặc tả này, như vậy sẽ khơng có đối tươngứng với đặc tả này. Ví dụ:scanf“dcd”,a,b; trong dòng này chúng ta sẽ nhập 1 thành phần gọi là 1 trường số nguyên vào a,sau đó bỏ qua một thành phần là kí tự, và tiếp theo là một số nguyên vào b.• Quy cách nhập dữ liệuKhi chúng ta nhập dữ liệu từ bàn phím, kết thúc nhập bằng Enter ↵, thì tất cảnhững kí tự chúng ta gõ trên bàn phím đều được lưu trong vùng đệm nhập dữ liệu gọi là dòng vào- stdin – dòng vào kết thúc bởi↵, dữ liệu trên dòng vào này sẽ được cắt thành từng trường tuần tự từ trái qua phải và gán vào các biến hoặc vùng nhớ xácđịnh tương ứng bởi các con trỏ, các phần đã tách được sẽ bị loại khỏi dòng vào. Trước khi tách giá trị một trường thì các khoảng trắng phía trước của trường nếu cósẽ bị loại bỏ. Nếu trong đặc tả khơng có thành phần n quy định độ dài tối đa một trường thì các trường được xác định bởi các ký tự dấu cách, tab, enter gọi chung làkhoảng trắng ký hiệu là hoặc khi gặp ký tự không phù hợp với đặc tả hiện tại.Nếu trên dòng vào có nhiều hơn các thành phần yêu cầu của hàm nhập thì các thành phần chưa được nhận vẫn còn lưu trên dòng vào.Ví dụ: int a,b; float x;scanf“ddf”,a,b, x; với dòng vào là:143 535 34thì :- khoảng trắng đầu tiên bị loại bỏ, 143 là trường thứ nhất được gán vào a, – hai khoảng trắng bị loại bỏ, 535 là trường thứ hai được gán vào b,- một khoảng trắng bị loại bỏ, 34 được gán vào x cũn litrong dũng voGiáo trình tin học cơ sở II – Ngơn ngữ36Nếu trong đặc tả có thành phần xác định độ rộng tối đa n thì một trường sẽ kết thúc hoặc khi gặp khoảng trống, hay kí tự khơng phù hợp hoặc đã đủ độ dài nVí dụint a,b; float x; scanf“d2d3f”,a,b, x;với dòng vào là:143 537 34thì :- khoảng trắng đầu tiên bị loại bỏ, 143 là trường thứ nhất được gán vào a, – hai khoảng trắng bị loại bỏ, 53 là trường thứ hai được gán vào b,- một khoảng trắng bị loại bỏ, 7 được gán vào x còn lại 34↵ trong dòng vàoLưu ý:- Số các đặc tả phải tương ứng với số con trỏ trong danh sách con trỏ – Ký tự định kiểu trong đặc tả phải phù hợp với kiểu của con trỏ cần nhập liệu.- Dữ liệu nhập từ bàn phím phải phù hợp với các đặc tả. – Hàm scanf trả về số nguyên là số trường được nhập dữ liệu