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?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top