Thêm một khái niệm mà một nhà lập trình cũng cần quan tâm đó là C scanf fuction. Trong quá trình nhận thông tin đầu vào của người dùng thì không thể thiếu các ứng dụng tương tác như: trò chơi, hệ thống thời gian thực và các ứng dụng khác.
Đầu vào này quyết định việc thực thi các chức năng cụ thể của một hệ thống. Trong ngôn ngữ C, bất kỳ chương trình hay ứng dụng nào có giao diện dòng lệnh thì đều có thể sử dụng phương thức scanf cho mục đích này. Vậy C scanf funtion là gì? Cách nhận biết thế nào cùng Box.edu tìm hiểu nhé!
Xem thêm: Hướng dẫn cách để tạo Vector trong C chính xác nhất
Xem thêm: Những kiến thức về trình biên dịch C Compiler for Mac
Xem thêm: Hướng dẫn các cách so sánh chuỗi trong c strcmp
Mục lục bài viết
Chức năng của C scanf function
Chức năng của C scanf funtion
Trên thực tế thì scanf function được biết đến với vai trò quan trọng trong các thao tác nhập dự liệu từ người dùng qua các ứng dụng dòng lệnh. Cụ thể mời các bạn cùng đọc thêm ở bài viết này.
Phương thức C scanf này là một hàm nằm trong thư viện ‘stdio’. Nó được sử dụng để đọc đầu vào được định dạng bao gồm: các ký tự, chuỗi và dữ liệu số từ phương thức nhập chuẩn (stdin), thường là bàn phím. Mặc dù scanf nắm một chức năng cực kỳ hữu ích trong các chương trình đơn giản hơn, nhưng nó lại không xử lý hiệu quả các lỗi đầu vào của con người. Điều này làm cho hàm C scanf function không đáng tin cậy và do vậy chỉ nên được sử dụng để triển khai các chương trình đơn giản với mức độ tin cậy không được cao.
Cú pháp của hàm C scanf function
Mỗi một hàm lệnh trong ngôn ngữ lập trình sẽ có cú pháp riêng biệt mà bạn cần phải nắm được nó một cách chính xác nhất. Cụ thể đó là:
#include <stdio.h>
int scanf (định dạng const char *, & biến, ...);
Để có thể sử dụng C scanf, thì bắt buộc phải cần có thư viện ‘stdio’ trong tệp mã nguồn. Bạn có thể thấy từ cú pháp của hàm C ‘scanf’ rằng đầu vào của người dùng được định dạng với một đối số ‘format’. Các định dạng hợp lệ sẽ được gán cho một đối số hay còn gọi là biến.
Đối số định dạng của hàm C scanf chính là một chuỗi ký tự C, bao gồm một hay nhiều thành phần dưới đây:
- Định dạng thông số
- Ký tự khoảng trắng
- Các ký tự không có khoảng trắng
Khi thực hiện thành công hàm C scanf, tổng số ký tự được đọc từ đầu vào cũng được trả về. Còn nếu nó không thành công, thì một giá trị âm hoặc một EOF sẽ được trả về bởi hàm.
Đặc điểm của bộ định dạng hàm scanf
% [*] [width] [length_Modifier] type_Specifier
Định dạng hàm C scanf là sự kết hợp của các tham số đã được đề cập ở trên. Mọi thông số đều được bắt đầu bằng ký hiệu phần trăm (%). Sau đây là mô tả ngắn gọn về các chỉ định định dạng nói trên cụ thể:
- Dấu ‘*’ thể hiện là một chỉ định tùy chọn, chỉ định rằng đầu vào của người dùng được đọc từ ‘stdin’ nhưng có khả năng bị bỏ qua và không được lưu lại
- ‘Chiều rộng’ là một thông số tùy chọn cho biết số lượng tối đa từ tổng số ký tự đầu vào có thể được đọc từ ‘stdin’
- Đề xuất ‘length_Modifiers’ là một mục tùy chọn khác và được sử dụng để chỉ ra loại chính xác cho đầu vào của người dùng, ví dụ như dài ‘l’ không tồn tại các chữ cái chuyển đổi rõ ràng
- Ngoài ra thuộc tính ‘type_Specifier’ là một ký tự chuyển đổi được sử dụng để chỉ ra loại dữ liệu thực tế được đọc từ ‘stdin’. Đầu vào của người dùng được chuyển đổi thành loại dữ liệu được cung cấp và đồng thời được gán cho các biến tương ứng
Bộ định dạng các loại chức năng C scanf
Các chỉ định loại hàm C scanf thường sẽ xác định loại đầu vào. Sau đây là một vài định nghĩa quan trọng và được sử dụng thường xuyên nhất:
- Đầu tiên là chữ cái ‘c’ cho thấy rằng đầu vào được chuyển đổi thuộc loại ‘char *’. Nó được sử dụng để đại diện cho một ký tự duy nhất. Nếu đầu vào của người dùng có độ dài lớn hơn một, thì chỉ có ký tự đầu tiên được đọc từ tất cả các đầu vào
Đoạn mã đầu vào
ký tự c;
scanf ("% c", & c); //Thử nghiệm
printf ("Ký tự đầu tiên là% c \ n", c); // Ký tự đầu tiên là T
- Tiếp theo là chữ cái ‘s’ đại diện cho một mảng ‘char *’. Nó chuyển đổi đầu vào thành một mảng ký tự và bỏ qua các ký tự sau khoảng trắng sau đó
Đoạn mã sau khoảng trắng
char firstName [50];
scanf ("% s", firstName); // John Doe
printf ("Tên được cung cấp là% s \ n", firstName); //John
// Các chữ cái 'd' và 'i' đại diện cho một số nguyên thập phân.
int i = 0;
scanf ("% d", & i); // - 21
printf ("Số đã nhập là% d \ n", i); // - 21
// Các chữ cái 'a', 'e', 'f' và 'g' là các chữ cái chuyển đổi đầu vào cho float và double.
float x;
scanf ("% f", & x); //21.12
printf ("Bạn% f tuổi. \ n", x); //21.120000
// Chữ cái 'x' nhận đầu vào của người dùng ở dạng số nguyên thập lục phân.
không dấu int i = 0;
scanf ("% x", & i); //MỘT
printf ("Giá trị thập phân là% i \ n", i); // 10
Các đối số bổ sung của hàm scanf
Các đối số bổ sung của hàm scanf
Thông thường các đối số bổ sung trong hàm C scanf function sẽ phụ thuộc vào số lượng từ định dạng trong chuỗi định dạng vì mỗi ký tự sẽ thực hiện lưu một phần của đầu vào. Do đó nên sử dụng một số lượng bằng nhau các từ định dạng và biến trong một hàm, nếu không thì hàm này có thể trả về kết quả không rõ ràng. Đoạn mã dưới đây sẽ minh họa cho việc sử dụng nhiều mã định dạng khác nhau:
Đoạn mã cụ thể:
không dấu int age = 0; int id; tên char [50];
printf ("Nhập Tên, Tuổi, ID và Mã Bảo mật \ n");
scanf ("% [^ \ n]% 2d% i% * d", tên, & tuổi & id);
printf ("Tên người dùng là% s \ n", tên);
printf ("Tuổi của% i. \ n", tuổi);
printf ("Với ID =% i. \ n", id);
Đầu vào | Đầu ra |
John Doe2277999 | Tên người dùng là John Doe Tuổi 22 với ID = 77. |
Biến thể C scanf của hàm sscanf
int sscanf (const char * inputStr, const char * format, & variable,…);
Chức năng C scanf function và sscanf sẽ tương tự nhau về chức năng. Sự khác biệt duy nhất giữa cả hai là scanf đọc từ đầu chuẩn vào. Còn ngược lại, sscanf đọc đầu vào từ một chuỗi ký tự, được chuyển làm đối số đầu tiên cho hàm.
Chức năng của C Scanf thay thế
Hàm C scanf không có khả năng phát hiện tràn bộ đệm. Do vậy, khi bộ đệm được cung cấp đạt đến giới hạn của nó, các ký tự đầu vào bổ sung sẽ ghi đè lên bộ nhớ xảy ra hiện tượng bị chiếm dụng. Ví dụ minh họa cụ thể dưới đây mời các bạn cùng theo dõi:
char nameWithSpace [5];
scanf ("% [^ \ n]", nameWithSpace); // John Doe
printf ("Tên đầy đủ là% s \ n", nameWithSpace); // John Doe
Đối với đoạn mã trên, kích thước bộ đệm là ‘5’. Nhưng thông tin nhập của người dùng có độ dài lớn hơn ‘5’ sẽ làm tràn bộ đệm này. Một giải pháp thay thế tốt hơn ở dạng hàm ‘fgets’. Đó là hàm này đọc một dòng từ một luồng được chỉ định bao gồm cả đầu vào chuẩn.
Có thể nói Scanf chính là một trong những hàm cơ bản nhất. Của ngôn ngữ C và được sử dụng để thực hiện các thao tác nhập liệu cơ bản. Như nhận đầu vào chuỗi từ người dùng trong các ứng dụng dòng lệnh. Để nghiên cứu sâu và kỹ hơn về ngôn ngữ C và chức năng cốt lõi của nó. Thì bạn cần dành thời gian tìm hiểu, trau dồi thêm những kiến thức cần thiết. Kinh nghiệm nhiều hơn cho bản thân.
Tổng kết
Box.edu hy vọng rằng những thông tin chia sẻ về C scanf Function. Trong ngôn ngữ lập trình này sẽ giúp các bạn nắm chắc được những khái niệm cần thiết. Phục vụ cho quá trình học tập và nâng cao khả năng phân tích trong công việc của một lập trình viên. Như đã chia sẻ ở trên thì quan trọng là bạn phải hiểu rõ bản chất của scanf. Để biết cách sử dụng nó một cách hiệu quả hơn phục vụ cho công việc của bản thân.