elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] error en scanf("%c",&variable)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] error en scanf("%c",&variable)  (Leído 3,681 veces)
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
[C] error en scanf("%c",&variable)
« en: 23 Junio 2013, 00:14 am »

Hola, tengo un problema con algo tan sencillo:

1- Entrada de nombre sin problemas, al dar una nueva linea la entrada de matricula falla
2- como matricula se imprimen datos basura, no te deja escribir nada, por lo tanto la condicion no funciona y lo demas tampoco  :(
Código
  1. int informacion_personal()
  2. {
  3.    char nombre_apellido[50];
  4.    char id[12];
  5.    unsigned short numero_caracteres=0;
  6.    printf("Para finalizar escribe tu nombre y matricula\n\n");
  7.    printf("Nombre: ");
  8.    scanf(" %c",&nombre_apellido);
  9.    printf("\nMatricula: ");
  10.    scanf("%c",&id);
  11.    numero_caracteres = strlen(id);
  12.    if(numero_caracteres>9)
  13.    {
  14.        printf("Demasiados caracteres!\n");
  15.    }
  16.    strcpy(nombre,nombre_apellido);
  17.    printf("%s %s",matricula,nombre);
  18.    getch();
  19. }
  20.  

No hay mucho que pueda hacer, intente con gets pero al correr se salta la instruccion y no puedes escribir nada, tenia asignado los valores a variables globales (nombre y matricula) pensando que eso era el problema pero no, reasigne a locales y nada.


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [C] error en scanf("%c",&variable)
« Respuesta #1 en: 23 Junio 2013, 00:21 am »

Un despiste tonto, fíjate que estás poniendo el especificador de formato del caracter "%c" no el de cadena "%s" , por lo tanto cambia:
Código
  1. scanf(" %c",&nombre_apellido);
  2. scanf("%c",&id);
Por:
Código
  1. scanf(" %s",&nombre_apellido);
  2. scanf("%s",&id);
De todas maneras te digo que en el nombre_apellido, no vas a poder albergar el nombre y el apellido juntos si utilizas la función scanf tal y como está ya que esta de la cadena "Pepito Jimenez" te leerá "Pepito". Tendrías que ponerlo de esta manera:
Código
  1. scanf(" %s[^\n]",&nombre_apellido);


« Última modificación: 23 Junio 2013, 00:25 am por avesudra » En línea

Regístrate en
MeCraniDOS


Desconectado Desconectado

Mensajes: 337


Sr. Glass


Ver Perfil
Re: [C] error en scanf("%c",&variable)
« Respuesta #2 en: 25 Junio 2013, 01:35 am »


Tendrías que ponerlo de esta manera:
Código
  1. scanf(" %s[^\n]",&nombre_apellido);

También puedes usar
Código
  1. gets(nombre_apellido);

En línea

"La física es el sistema operativo del Universo"
     -- Steven R Garman
avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: [C] error en scanf("%c",&variable)
« Respuesta #3 en: 25 Junio 2013, 01:45 am »

También puedes usar
Código
  1. gets(nombre_apellido);
Sí lo pensé pero en ese caso creo que es mejor:
Código
  1. fgets ( &nombre_apellido, 50, stdin );

¡Un saludo!
En línea

Regístrate en
edr89

Desconectado Desconectado

Mensajes: 105


Ver Perfil
Re: [C] error en scanf("%c",&variable)
« Respuesta #4 en: 30 Junio 2013, 08:01 am »

De todas maneras te digo que en el nombre_apellido, no vas a poder albergar el nombre y el apellido juntos si utilizas la función scanf tal y como está ya que esta de la cadena "Pepito Jimenez" te leerá "Pepito". Tendrías que ponerlo de esta manera:
Código
  1. scanf(" %s[^\n]",&nombre_apellido);

Gracias, acabo de leerlo hace poco, la funcion scanf agrega un caracter nulo cuando lee un espacio en blanco, por eso es que siempre me imprimia la primera parte, lo que no encuentro es
Código
  1. scanf(" %s[^\n]"

Que significa [^\n]? es un especificador de conversion? modificadores de conversion?

Encontre que podria utilizar:
Código
  1. scanf("%s %s",&nombre)
así podria escribir un nombre de dos palabras pero como no tengo la certeza de la longitud queda mejor gets.

Estaba pensando que la funcion gets() falla porque no limpio el buffer antes de escribir la cadena y al entrar la funcion toma lo que esta en el buffer, opte por preguntar los datos al inicio y no al final, entonces todo corre ya como deberia.

En el libro Certified course in C, David Himmel, Waite Group Press, capitulo 4 explican muy bien las funciones printf y scanf, varias paginas resuelven el error.

Perdon por no haber respondido antes pero no tenia internet en la computadora, gracias y saludos!
En línea

mr.blood

Desconectado Desconectado

Mensajes: 150


Ver Perfil
Re: [C] error en scanf("%c",&variable)
« Respuesta #5 en: 30 Junio 2013, 09:40 am »

Bueno, creo que ya resolvieron tus dudas. Solo comentar una cosa:

El scanf funciona con una especie de expresiones regulares, el % indica coger datos, el [^\n] le especificaria que guarde en la variable todo hasta encontrar un \n osea hasta que pulsemos enter. Que alguien me corrija si me equivoco.

Y con toda certeza puedo decirte que evites usar gets(); Es una función que no controla cuantos bytes guarda lo que puede provocarte Overflows varios en tus códigos. Mejor usa fgets.

Sa1uDoS
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines