2009-09-11 55 views
6

想象一下以下內容:不要在scanf關心

您在scanf()串讀,但你只需要幾個數據點的的字符串中。

是否有一種簡單的方法可以丟棄無關信息,而不會丟失檢查相應數據是否存在的能力,因此您仍然可以輕鬆地拒絕格式錯誤的字符串?

例如:

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"; 

我要接受的第一個字符串,但忘了啤酒,因爲啤酒是yuckie。 我想拒絕第二和第三個字符串,因爲它們顯然不是7/11的適當列表;

所以我想下面的結構:

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); 

這樣我會保持格式檢查,但什麼會我把爲[不在乎]不會使編譯器哀鳴?

當然,我可以做一個我以後不用的變量,但這不是這個問題的要點。此外單獨檢查左側和右側是一個明顯的解決方案,我不在這裏尋找。

那麼,有沒有辦法不關心,但仍然檢查scanf和朋友中的一段字符串的類型?

回答

17

使用*作爲分配抑制字符%之後

例子:

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

我知道這將是要麼明顯的或不可能的。 – NomeN 2009-09-11 10:25:55