Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lerg96 en 8 Abril 2015, 05:13 am



Título: [?][C] Separando una cadena alfanumerica
Publicado por: lerg96 en 8 Abril 2015, 05:13 am
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
  1. printf("Cedula (X - XXXXXXXX): ");
  2. fgets(d,30,stdin);
  3. 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
  1. 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


Título: Re: [?][C] Separando una cadena alfanumerica
Publicado por: 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:
Código
  1. struct ALGO {
  2.   char N;
  3.   int dato;
  4. };
  5.  
  6. /* ... */
  7.  
  8. printf("Cedula (X - XXXXXXXX): ");
  9. fgets(d, 30, stdin);
  10. 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:
Código
  1. printf("Cedula (X - XXXXXXXX): ");
  2. fgets(d, 30, stdin);
  3. 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


Título: Re: [?][C] Separando una cadena alfanumerica
Publicado por: lerg96 en 8 Abril 2015, 23:55 pm
Si la primera parte de la cédula es un solo carácter lo puedes almacenar utilizando una variable del mismo tipo:
Código
  1. struct ALGO {
  2.   char N;
  3.   int dato;
  4. };
  5.  
  6. /* ... */
  7.  
  8. printf("Cedula (X - XXXXXXXX): ");
  9. fgets(d, 30, stdin);
  10. 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:
Código
  1. printf("Cedula (X - XXXXXXXX): ");
  2. fgets(d, 30, stdin);
  3. 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.