2009-09-11 12 views
6

Wyobraźmy sobie następujący:nie obchodzi w scanf

można przeczytać w ciągu z scanf() ale wystarczy tylko kilka z punktów danych w ciąg.

Czy istnieje łatwy sposób na wyrzucenie zbędnych informacji, bez utraty możliwości sprawdzenia, czy są tam odpowiednie dane, aby można łatwo odrzucić zniekształcone ciągi znaków?

przykład:

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

Chcę przyjąć pierwszy ciąg, ale zapomnieć o piwie, bo piwo jest yuckie. Chcę odrzucić drugi i trzeci ciąg, ponieważ wyraźnie nie są to odpowiednie listy dla 7/11;

Więc myślałem o następującej budowie:

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

ten sposób chciałbym zachować kontrolę formatu, ale to, co chciałbym umieścić na [nie obchodzi], że nie robi skowyt kompilatora?

Oczywiście mogłem po prostu utworzyć zmienną, której później nie używam, ale nie o to pytam. Również sprawdzenie lewej i prawej strony jest oczywistym rozwiązaniem, którego tutaj nie szukam.

Czy istnieje sposób, aby nie przejmować się, ale nadal sprawdzić typ fragmentu w scanf i przyjaciele?

Odpowiedz

17

Użyj * jako znak tłumienia przypisanie po%

Przykład:

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

Wiedziałem, że to być oczywiste lub niemożliwe. – NomeN