Autor
|
Tema: [C] error en scanf("%c",&variable) (Leído 3,729 veces)
|
edr89
Desconectado
Mensajes: 105
|
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 int informacion_personal() { char nombre_apellido[50]; char id[12]; unsigned short numero_caracteres=0; printf("Para finalizar escribe tu nombre y matricula\n\n"); scanf(" %c",&nombre_apellido ); numero_caracteres = strlen(id ); if(numero_caracteres>9) { printf("Demasiados caracteres!\n"); } strcpy(nombre ,nombre_apellido ); printf("%s %s",matricula ,nombre ); }
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
Mensajes: 724
Intentando ser mejor cada día :)
|
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: scanf(" %c",&nombre_apellido );
Por: scanf(" %s",&nombre_apellido );
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: scanf(" %s[^\n]",&nombre_apellido );
|
|
« Última modificación: 23 Junio 2013, 00:25 am por avesudra »
|
En línea
|
Regístrate en
|
|
|
MeCraniDOS
Desconectado
Mensajes: 337
Sr. Glass
|
Tendrías que ponerlo de esta manera: scanf(" %s[^\n]",&nombre_apellido );
También puedes usargets(nombre_apellido);
|
|
|
En línea
|
"La física es el sistema operativo del Universo" -- Steven R Garman
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
También puedes usargets(nombre_apellido);
Sí lo pensé pero en ese caso creo que es mejor: fgets ( &nombre_apellido, 50, stdin );
¡Un saludo!
|
|
|
En línea
|
Regístrate en
|
|
|
edr89
Desconectado
Mensajes: 105
|
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: 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
Que significa [^\n]? es un especificador de conversion? modificadores de conversion? Encontre que podria utilizar:
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
Mensajes: 150
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Real funcionamiento de "scanf"?
Programación C/C++
|
Morringos
|
2
|
3,032
|
29 Agosto 2011, 06:28 am
por Morringos
|
|
|
recursos visual basic, """"""proceso inmortal"""""
Análisis y Diseño de Malware
|
Dark4ngel
|
7
|
14,265
|
3 Noviembre 2011, 10:42 am
por Dark4ngel
|
|
|
Escritoro inaccesible: Error de "ATBroker.exe" "Explorer.exe" y "Taskmgr.exe".
Windows
|
Eleкtro
|
6
|
13,639
|
1 Diciembre 2011, 14:15 pm
por .:UND3R:.
|
|
|
NASM Linux printf - scanf "undefined reference"
ASM
|
Leyer
|
5
|
9,148
|
7 Enero 2012, 20:32 pm
por Eternal Idol
|
|
|
keyLogger en python, pero me lanza un error cuando escribo una "variable"
Scripting
|
GregoJm
|
2
|
3,500
|
1 Junio 2017, 08:58 am
por tincopasan
|
|