2009-09-11 13 views
6

Imagínese lo siguiente:no les importa en scanf

que se lee en una cadena con scanf() pero sólo se necesitan unos pocos de los puntos de datos en la cadena.

¿Hay alguna manera fácil de descartar la información extraña, sin perder la capacidad de verificar si los datos apropiados están ahí, por lo que todavía puede rechazar cadenas malformadas 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"; 

que desea aceptar la primera cadena, pero se olvidan 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;

Así que 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 Me gustaría mantener el control de formato, pero lo que iba a poner para [no les importa] que no hace que el compilador gemido?

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

Entonces, ¿hay alguna manera de no preocuparse pero aún así comprobar el tipo de un trozo de cuerda en scanf y amigos?

Respuesta

17

* Utilice un personaje como la supresión de asignación después%

Ejemplo:

sscanf([string here], "Get: %*d %s %d %s\n", bId, &cokes, cId); 
+3

sabía que iba a ser obvio o imposible. – NomeN