Pergunta
Imagine a seguinte:
você ler em uma string com scanf()
mas você só precisa de alguns dos pontos de dados na cadeia.
Existe uma maneira fácil de jogar fora a informação estranha, sem perder a capacidade de verificar se os dados apropriados está lá para que você ainda pode rejeitar cordas malformados facilmente?
exemplo:
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";
Eu quero aceitar a primeira corda, mas esquecer a cerveja, porque cerveja é yuckie. Quero rejeitar as segunda e terceira cordas, porque eles não são claramente as listas apropriadas para a 7/11;
Então, eu estava pensando sobre a seguinte construção:
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);
Desta forma, eu iria manter a verificação de formato, mas o que eu coloquei para [não se importam] que não faz a lamentação compilador?
É claro que eu poderia apenas fazer uma variável que eu não usar mais tarde, mas isso não é o ponto desta questão. Também verificar o lado esquerdo e direito separadamente é uma solução óbvia que eu não estou procurando aqui.
Assim, há uma maneira de não se preocupam, mas ainda verificar o tipo de um pedaço de corda em scanf e amigos?
Solução
Use a * como o personagem de supressão de atribuição após%
Exemplo:
sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);