Domanda

Immagina quanto segue:

leggi in una stringa con scanf () ma hai solo bisogno di alcuni punti dati nella stringa.

Esiste un modo semplice per eliminare le informazioni estranee, senza perdere la possibilità di verificare se sono presenti i dati appropriati in modo da poter ancora rifiutare facilmente le stringhe non valide?

Esempio:

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

Voglio accettare la prima stringa, ma dimentica la birra perché la birra è yuckie. Voglio respingere la seconda e la terza stringa perché chiaramente non sono le liste appropriate per il 7/11;

Quindi stavo pensando alla seguente costruzione:

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

In questo modo manterrei il controllo del formato, ma cosa metterei per [non importa] che non faccia gemere il compilatore?

Naturalmente potrei semplicemente creare una variabile che non userò in seguito, ma non è questo il punto di questa domanda. Anche il controllo separato della parte sinistra e destra è una soluzione ovvia che non sto cercando qui.

Quindi, c'è un modo per non preoccuparsene, ma controllare comunque il tipo di un pezzo di stringa in scanf e amici?

È stato utile?

Soluzione

Utilizza un * come carattere di soppressione dell'assegnazione dopo%

Esempio:

  sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top