[?][C] Separando una cadena alfanumerica

Iniciado por lerg96, 8 Abril 2015, 05:13 AM

0 Miembros y 1 Visitante están viendo este tema.

lerg96

Tengo un programa que necesito que me lea clientes, pero quiero que apartir de la cedula de identidad me muestre el si es extranjero o del pais.

Código (cpp) [Seleccionar]
printf("Cedula (X - XXXXXXXX): ");
fgets(d,30,stdin);
sscanf(d,"%s - %d",&nuevo->N,&nuevo->dato);


el programa toma la primera X, como cadena para saber si es V (Venezolano) o E (Extranjero) utilizaron una comparacion mas adelante. Y el resto que es XXXXXX, lo deberia guardar en una variable entera

había pensado en esto, pero el problema llega cuando no se colocan los espacios entre X, - y XXXXXX.

es decir, cuando el usuario coloca X-XXXXXXX, todo queda guardado en nuevo->N, y nuevo->dato queda dando numeros al alzar.

claro que ya intente colocando

Código (cpp) [Seleccionar]
sscanf(d,"%s-%d",&nuevo->N,&nuevo->dato);

en vez del anterior que mostré más arriba.

si conocen alguna manera de hacerlo, o un consejo o funcion que podria usar, se los agradeceria bastante

rir3760

Si la primera parte de la cédula es un solo carácter lo puedes almacenar utilizando una variable del mismo tipo:
struct ALGO {
   char N;
   int dato;
};

/* ... */

printf("Cedula (X - XXXXXXXX): ");
fgets(d, 30, stdin);
sscanf(d, " %c - %d", &nuevo->N, &nuevo->dato);


Si por alguna razón no es posible y se debe leer como una cadena de un solo carácter puedes indicar el numero máximo de caracteres a leer con:
printf("Cedula (X - XXXXXXXX): ");
fgets(d, 30, stdin);
sscanf(d, "%1s - %d", &nuevo->N, &nuevo->dato);


Si no funciona por favor indícalo y publica si es posible el código fuente completo.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

lerg96

Cita de: rir3760 en  8 Abril 2015, 07:32 AM
Si la primera parte de la cédula es un solo carácter lo puedes almacenar utilizando una variable del mismo tipo:
struct ALGO {
   char N;
   int dato;
};

/* ... */

printf("Cedula (X - XXXXXXXX): ");
fgets(d, 30, stdin);
sscanf(d, " %c - %d", &nuevo->N, &nuevo->dato);


Si por alguna razón no es posible y se debe leer como una cadena de un solo carácter puedes indicar el numero máximo de caracteres a leer con:
printf("Cedula (X - XXXXXXXX): ");
fgets(d, 30, stdin);
sscanf(d, "%1s - %d", &nuevo->N, &nuevo->dato);


Si no funciona por favor indícalo y publica si es posible el código fuente completo.

Un saludo

Listo. Muchas gracias, me sirvió usando el "%1s" aunque extrañamente cuando usaba %c y lo mostraba aparecia V=Venezolano, no tengo ni la mas minima idea de donde salio el resto que no fuera V. Aun asi muchas gracias, un abrazo.