2009-09-11 5 views
6

Imaginez ce qui suit:ne se soucient pas scanf

vous lisez dans une chaîne avec scanf() mais vous avez seulement besoin quelques-uns des points de données dans la chaîne.

Y at-il un moyen facile de jeter les informations superflues, sans perdre la possibilité de vérifier si les données appropriées sont là pour que vous puissiez toujours rejeter facilement les chaînes malformées?

exemple:

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

Je veux accepter la première chaîne, mais oublier la bière parce que la bière est yuckie. Je veux rejeter les deuxième et troisième chaînes parce qu'elles ne sont clairement pas les listes appropriées pour le 7/11;

Alors je pensais à la construction suivante:

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

De cette façon, je garderais le contrôle du format, mais ce que je mettrais pour [ne se soucient pas] qui ne fait pas le pleurnicher du compilateur?

Bien sûr, je pourrais juste faire une variable que je n'utiliserai pas plus tard, mais ce n'est pas le but de cette question. Vérifier également le côté gauche et droit séparément est une solution évidente que je ne cherche pas ici.

Alors, y a-t-il un moyen de ne pas se soucier de vérifier le type d'un morceau de chaîne dans scanf et ses amis?

Répondre

17

Utilisez un * comme caractère de suppression d'affectation après%

Exemple:

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

Je savais que ce serait soit évidente, voire impossible. – NomeN