Giáo trình ngôn ngữ C



tải về 2.34 Mb.
Chế độ xem pdf
trang29/62
Chuyển đổi dữ liệu16.03.2023
Kích2.34 Mb.
#54376
1   ...   25   26   27   28   29   30   31   32   ...   62
C ĐHQGHN

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 nhập. 
cú pháp 
int 
scanf(const 
char * format, ds_các_con_trỏ); 
chức năng 


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 khuôn 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] 
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 
-  là kí tự quy định kiểu dữ liệu cần nhập ví dụ bạn muốn nhập 
số nguyên 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 

integer
int *arg 
D, ld 
integer
long *arg 
e, E 
Float
float *arg 

Float
float 
*arg 
g, G 
Float
float *arg 

Octal
int *arg 

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

Unsigned int
unsigned int *arg 

Unsigned int
unsigned long *arg 
x
Hexadecimal 
int 
*arg 
X
Hexadecimal 
int 
*arg 

Character string char arg[] 

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(“%d%*c%d”,&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(“%d%%d%f”,&a,&b, &x); 
với dòng vào là:

tải về 2.34 Mb.

Chia sẻ với bạn bè của bạn:
1   ...   25   26   27   28   29   30   31   32   ...   62




Cơ sở dữ liệu được bảo vệ bởi bản quyền ©hocday.com 2024
được sử dụng cho việc quản lý

    Quê hương