2009-09-11 45 views
6

Hãy tưởng tượng những điều sau:không quan tâm đến scanf

bạn đọc một chuỗi với scanf() nhưng bạn chỉ cần một vài điểm dữ liệu trong chuỗi.

Có cách nào dễ dàng để vứt bỏ thông tin không liên quan, mà không mất khả năng kiểm tra xem dữ liệu thích hợp có ở đó để bạn vẫn có thể từ chối các chuỗi không đúng định dạng không?

dụ:

const char* store = "Get: 15 beer 30 coke\n"; 
const char* dealer= "Get: 8 heroine 5 coke\n"; 
const char* scream= "Get: f* beer 10 coke\n"; 

tôi muốn chấp nhận chuỗi đầu tiên, nhưng quên đi những bia vì bia là yuckie. Tôi muốn từ chối chuỗi thứ hai và thứ ba vì chúng rõ ràng không phải là danh sách phù hợp cho ngày 7/11;

Vì vậy, tôi đã suy nghĩ về việc xây dựng như sau:

char* bId = new char[16]; 
char* cId = new char[16]; 
int cokes; 
sscanf([string here], "Get: %d %s %d %s\n", [don't care], bId, &cokes, cId); 

Bằng cách này tôi sẽ tiếp tục việc kiểm tra định dạng, nhưng những gì tôi sẽ đưa cho [không quan tâm] mà không làm cho trình biên dịch tiếng rên rỉ?

Tất nhiên tôi chỉ có thể tạo biến mà tôi không sử dụng sau này, nhưng đó không phải là điểm của câu hỏi này. Ngoài ra kiểm tra bên trái và bên phải một cách riêng biệt là một giải pháp rõ ràng tôi không tìm kiếm ở đây.

Vì vậy, có cách nào để không quan tâm nhưng vẫn kiểm tra loại của một đoạn chuỗi trong scanf và bạn bè?

Trả lời

17

Dùng * như nhân vật ức chế chuyển nhượng sau%

Ví dụ:

sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId); 
+3

tôi biết nó sẽ là một trong hai rõ ràng hoặc không thể. – NomeN

Các vấn đề liên quan