Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Fer995 en 27 Octubre 2010, 01:47 am



Título: funcion scanf ayuda!
Publicado por: Fer995 en 27 Octubre 2010, 01:47 am
Hola a todos!

es mi primer mensaje en este foro!

estoy haciendo todas las semanas unas practicas en la universidad.. en las practicas suelo utilizar la funcion scanf para leer datos.

el problema es que no me dejan utilizar fflsuh y entonces tengo que estar metiendo \n en los scanf de la siguiente manera:

Código:
scanf("\n%d",numero);

la pregunta es que no entiendo que pasa cuando le metes /n al scanf y porque a veces da = meterlo o no y otras si es necesario!! gracias!


Título: Re: funcion scanf ayuda!
Publicado por: do-while en 27 Octubre 2010, 03:00 am
ˇBuenas!

El porblema con scanf, es que si quieres leer un dato, para realizar la lectura tienes que pulsar intro, y es entonces cuando la funcion lee datos. Lo que pasa es que cuando tu pulsas intro estas introduciendo un '\n' en stdin, y ese '\n', scanf no lo lee, se queda en stdin, asi que cuando realizas la siguiente lectura, tienes un caracter "inesperado" que te estorba para hacer segun que cosas.

utiliza fgets+sscanf. En las chinchetas tienes un post sobre que es lo que no hay que hacer en C. Echale un ojo y encontraras datos utiles.

ˇSaludos!


Título: Re: funcion scanf ayuda!
Publicado por: Fer995 en 27 Octubre 2010, 13:50 pm
ˇBuenas!

El porblema con scanf, es que si quieres leer un dato, para realizar la lectura tienes que pulsar intro, y es entonces cuando la funcion lee datos. Lo que pasa es que cuando tu pulsas intro estas introduciendo un '\n' en stdin, y ese '\n', scanf no lo lee, se queda en stdin, asi que cuando realizas la siguiente lectura, tienes un caracter "inesperado" que te estorba para hacer segun que cosas.

utiliza fgets+sscanf. En las chinchetas tienes un post sobre que es lo que no hay que hacer en C. Echale un ojo y encontraras datos utiles.

ˇSaludos!

entonces a ver si he entendido bien.

si yo introdujera un dato y pulso enter un scanf normal me lo debe leer correctmente

pero a la hora de querer leer un dato nuevo en otra linea ahi si debo poner \n para que lo lea correctamente no es asi? gracias!


Título: Re: funcion scanf ayuda!
Publicado por: [L]ord [R]NA en 27 Octubre 2010, 16:44 pm
Otra cosa, a scanf se pasa un puntero a la variable.


Título: Re: funcion scanf ayuda!
Publicado por: do-while en 27 Octubre 2010, 16:57 pm
ˇBuenas!

scanf no tiene porque leer bien los datos que le pides.

prueba el siguiente bucle:
Código
  1. do{
  2.  
  3.    printf("Introduce un numero (cero para salir): ");
  4.  
  5.    scanf("%d",&opcion);
  6.  
  7. }while(opcion!=0);
  8.  

Ahora escribe "hola" o cualquier cadena. El bucle se "volvera loco". Aqui (http://www.cplusplus.com/reference/clibrary/cstdio/scanf/) encontraras informacion sobre scanf. Aprobecha que devuelve el numero de parametros leidos para saber si se ha podido leer lo que quieres. Y si no lo consigues, sabiendo que el input termina con '\n', lee caracteres (getchar()) hasta que encuentres dicho caracter para vaciar el bufer de entrada. Si consiguieses leer los datos correctamente, tambien tendiras que usar por ejemplo getchar() para sacar de stdin el caracter '\n' que queda...

ˇSaludos!


Título: Re: funcion scanf ayuda!
Publicado por: Oblivi0n en 29 Octubre 2010, 21:52 pm
Cuando introduces "\n" lo que haces es indicarle que haga una nueva linea, osea, que lea la linea 1 y salte a la 2.

Otas opciones similares son "\a" (alert, suena un pitido) "\t" (tabulador) , etc etc, si buscas por internet encontraras tablas con todas


Título: Re: funcion scanf ayuda!
Publicado por: Fer995 en 30 Octubre 2010, 02:31 am
gracias por vuestras respuestas son de utilidad!

moderadores cerrar el post!