Question

Imaginez ce qui suit:

vous avez lu une chaîne avec scanf () mais vous n'avez besoin que de quelques points de données dans la chaîne.

Existe-t-il un moyen simple de supprimer les informations superflues sans perdre la possibilité de vérifier si les données appropriées sont présentes afin de pouvoir 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 corde, mais oubliez la bière parce que la bière est yuckie. Je souhaite rejeter les deuxième et troisième chaînes car elles ne sont clairement pas les listes appropriées pour le 7/11;

Je pensais donc à 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 la vérification du format, mais que mettrais-je pour [ne me soucie pas] qui ne fait pas gémir le compilateur?

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

Alors, y a-t-il un moyen de ne pas s’inquiéter mais de vérifier le type de chaîne dans scanf et ses amis?

Était-ce utile?

La solution

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

Exemple:

  sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top