Search…

Hàm sscanf trong Ngôn Ngữ C++

06/09/20204 min read
Tìm hiểu về hàm sscanf trong C++.

Hàm sscanf

Hàm sscanf dùng để đọc dữ liệu từ một chuỗi có thể xác định được định dạng của nó rồi truyền vào các đối số cần thiết. Nếu thành công, hàm trả về các giá trị của các đối số được truyền vào. Số lượng các giá trị được trả về có thể bằng với số lượng đối số cần lấy giá trị hoặc có thể ít hơn và thậm chí bằng không nếu xảy ra các lỗi tương ứng đối với các đối số. Nếu có lỗi xảy ra trước khi đối số đầu tiên được gán giá trị thì giá trị trả về sẽ là EOF.

Cách sử dụng hàm sscanf

Muốn sử dụng hàm sscanf rất đơn giản, chỉ cần tuân theo cấu trúc sau:

sscanf(const char* buffer, const char* format, argument, …)

buffer

buffer là chuỗi dùng để truyền vào và yêu cầu sscanf đọc hoặc có thể xem nó là một dữ liệu nguồn dùng để lấy các tài nguyên.

format

format là chuỗi chứa một hay nhiều loại định dạng như:

  • Các ký tự khoảng trắng : hàm sẽ đọc và bỏ qua các ký tự khoảng trắng mà nó gặp phải, bất kể số lượng khoảng trắng là bao nhiêu và khoảng trắng được thể hiện dưới dạng nào(space, tab,…).
    Các ký tự khác ngoại trừ ký tự khoảng trắng và "%": hàm sẽ đọc từng ký tự của chuỗi buffer và kiểm tra xem nó có đúng với định dạng không. Nếu phù hợp hàm sẽ tự động đọc tiếp các ký tự tiếp theo. Nếu các ký tự được đọc được không phù hợp với định dạng mà nó được truyền vào thì hàm sscanf sẽ gặp lỗi và trả về.
    Định dạng đặc biệt: Một chuỗi được hình thành từ dấu "%" mở đầu, được dùng để xác định kiểu và định dạng của dữ liệu mà muốn đọc. Các ký tự này tuân theo định dạng sau %[*][width][modifiers][type].
    • % (bắt buộc) : mở đầu chuỗi ký tự đặc biệt.
    • * (không bắt buộc): ký tự báo hiệu dữ liệu này được đọc nhưng bị bỏ qua không được lưu vào các đối số tương ứng.
    • width (không bắt buộc): số lượng ký tự tối đa được đọc.
    • modifiers (không bắt buộc): chỉ định một kích thước khác cho các dữ liệu được trỏ vào các đối số. Trong đó:
      • h : short int (dành cho các kiểu d, In),  unsigned short int (dành o, ux).
      • l : long int (dành cho d, in), or unsigned long int (dành cho  o, ux), or double (dành cho  e, fg).
      • L : long double (dành cho  e, fg).

Các kiểu được đề cập ở trên, để hiểu rõ vui lòng xem ở mục type dưới đây:

  •  type: là một ký tự dùng để xác định kiểu của dữ liệu sẽ được đọc. Có các loại kiểu sau:
    • c: một ký tự.
    • d: số nguyên hệ thập phân.
    • e, E, f, g, G:
    • o: số nguyên hệ bát phân.
    • s: chuỗi ký tự.
    • p: địa chỉ con trỏ.
    • u: số nguyên hệ thập phân không dấu.
    • x, X: số nguyên hệ thập lục phân.
    • [character]: bất kỳ ký tự nào có xuất hiện trong dấu ngoặt vuông, có thể dùng dấu “-“ để chỉ từ một số tới một số hoặc từ một ký tự tới một ký tự ví dụ như: [0-4], [abc].
    • [^character]: bất kỳ kí tự nào ngoại trừ ký tự có trong dấu ngoặt vuông.

argument

Ở đây, có thể truyền vào các đối số cần lấy giá trị, những đối số này nên lấy con trỏ nếu như muốn lưu trữ chúng bằng cách truyền tham chiếu cho nó.

Ví dụ

#include <iostream>

int main()
{
	int i, j;
	float x;
	int y;
	char str[] = "AmySS-1 70 21.05";
	char str1[4];
	char str2[4];
	sscanf(str, "%3s%s%d%f", str1, str2, &i, &x);

	std::cout << "i = " << i << "\nx = " << x << '\n'
		<< "str1 = " << str1 << '\n' << "str2 = " << str2;
	return 0;
}
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024