Pregunta

Imagina lo siguiente:

has leído una cadena con scanf () pero solo necesitas algunos puntos de datos en la cadena.

¿Existe una manera fácil de deshacerse de la información extraña, sin perder la capacidad de verificar si existen los datos adecuados para que pueda rechazar cadenas mal formadas fácilmente?

ejemplo:

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

Quiero aceptar la primera cadena, pero olvídate de la cerveza porque la cerveza es yuckie. Quiero rechazar las cadenas segunda y tercera porque claramente no son las listas apropiadas para el 7/11;

Estaba pensando en la siguiente construcción:

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 esta manera mantendría la verificación de formato, pero ¿qué pondría por [no importa] que no haga quejarse el compilador?

Por supuesto que podría hacer una variable que no uso más adelante, pero ese no es el punto de esta pregunta. Además, comprobar el lado izquierdo y derecho por separado es una solución obvia que no estoy buscando aquí.

Entonces, ¿hay una manera de que no te importe pero que aún compruebes el tipo de cadena en scanf y amigos?

¿Fue útil?

Solución

Use un * como carácter de supresión de asignación después de%

Ejemplo:

  sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top