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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Sacar con scanf() todo el contenido del buffer del teclado.-
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Sacar con scanf() todo el contenido del buffer del teclado.-  (Leído 7,704 veces)
DanielC

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Sacar con scanf() todo el contenido del buffer del teclado.-
« en: 7 Septiembre 2010, 02:12 am »

Hola a todos.-
Este es mi primer post y como me aburren las presentaciones les dejo algunos datos que pueden interesar a la hora de ayudarme.-
Tengo 58 años y estudio con un manual de deitel & deitel y aprendo con la ayuda invalorable de los foros.-
Bueno al grano, les dejo mi código para que me digan como puedo hacer para salir del bucle, probe de muchas manera pero como desconozco lo que leerá scanf() cuando encuentra el buffer vacio no se que poner para finalizar el while().-

Código:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   char frase[20];
   printf("\n\tIngrese una frase con espacios...:");

   while(1)
   {
      scanf("%s",frase);
      printf("\n\t%s\n\t",frase);
   }

   return 0;
}

Espero que me den la respuesta o alguna sugerencia de como solucionar esto.-

Saludos.
Daniel


En línea

Abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
SirLanceCC


Desconectado Desconectado

Mensajes: 1.093


Ver Perfil WWW
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #1 en: 7 Septiembre 2010, 03:21 am »

http://www.cplusplus.com/reference/clibrary/cstdio/scanf/

scanf() devuelve el número de variables leidas, o un número negativo si se alcanza el final del archivo.

quedaría así tu ciclo:
Código
  1. while(scanf("%s",frase) > 0)
  2.   {
  3.      printf("\n\t%s\n\t",frase);
  4.   }
  5.  

recuerda que while evalúa la condición primero y si resulta verdadera se realiza lo que está entre corchetes.


En línea

DanielC

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #2 en: 7 Septiembre 2010, 03:39 am »

Hola SirLanceCC
Que ilusión me diste, sali disparado a probar tu código pero vaya sorpresa igual no sale del bucle.-

Seguiremos investigando.-

Un gran saludo y gracias por tu tiempo.-

Lenguaje C - Windows XP - Code::Blocks
En línea

Abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Darioxhcx


Desconectado Desconectado

Mensajes: 2.294


Ver Perfil
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #3 en: 7 Septiembre 2010, 03:48 am »

si usas gets ?
En línea

DanielC

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #4 en: 7 Septiembre 2010, 04:01 am »

Hola
Gracias por tu sugerencia pero para el caso usaría
Código:
fgets(cadena, maximo, stdin);
Que me parece perfecta, lo que pasa es que quiero hacerlo con scanf para aprender algo nuevo.-

Saludos.
Daniel
En línea

Abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #5 en: 7 Septiembre 2010, 04:08 am »

Puedes usar:

Código
  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. char buffer[100];
  5. printf("Cadena : ");
  6. scanf("%100[^\n]", buffer);
  7. printf("Cadena : [%s]\n", buffer);
  8. return 0;
  9. }
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
SirLanceCC


Desconectado Desconectado

Mensajes: 1.093


Ver Perfil WWW
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #6 en: 7 Septiembre 2010, 06:06 am »

cierto... es que scanf tiene comportamientos que pueden parecer extraños.

Por ejemplo ignora todos los espacios en blanco y saltos de linea antes de leer algo.
El codigo que te puse, funcionaría para leer puros números por ejemplo y cuando alguien ingrese algo que no sea reconocido como tal, terminará el ciclo. También si la entrada estándar la diriges desde un archivo debería funcionar (según yo).

me refiero a cuando lo ejecutas así.
Código:
programa.exe < mientrada.txt
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #7 en: 7 Septiembre 2010, 09:25 am »

Lo mejor es NO usar scanf NUNCA, si es para una cadena es preferible solo fgets y si es para leer otras cosas fgets + sscanf.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #8 en: 7 Septiembre 2010, 11:22 am »

Yo estoy de acuerdo con Eternal Idol, pues a mi scanf me ha dado muxos problemas. Antes tambien usaba scanf, y gets, pero es mejor fgets....

Saludos
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
DanielC

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Sacar con scanf() todo el contenido del buffer del teclado.-
« Respuesta #9 en: 7 Septiembre 2010, 18:08 pm »

Hola a todos.
Estoy anonadado apabullado con tantas respuestas, muchas pero muchas gracias a todos por intentar resolver mi problema.-
Lo de Leo Gutiérrez. también lo tenia y funciona muy bien.-
Solo les pido un esfuercito mas, alguien debe saber que devuelve scanf cuando encuentra el buffer vacio, con eso lo pondría como condición para finalizar el bucle y estaría todo resuelto(algo,algo,algo debe ser).-

Bueno un gran saludo y continuare con el tema, si lo resuelvo yo lo posteo.-

Saludos.
Daniel
En línea

Abraza las cosas y personas malas como si fueran tu mas preciada joya, Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO]Sacar datos de contenido web
.NET (C#, VB.NET, ASP)
.:Weeds:. 4 3,685 Último mensaje 26 Mayo 2011, 01:06 am
por .:Weeds:.
scanf no lee vacío desde teclado?
Programación C/C++
flacc 7 6,094 Último mensaje 8 Septiembre 2012, 14:09 pm
por leosansan
Ver todo el contenido de dll y exe
Dudas Generales
d3xf4ult 3 7,903 Último mensaje 23 Enero 2013, 23:57 pm
por MCKSys Argentina
Limpieza de buffer de teclado en lenguaje C. « 1 2 »
Programación C/C++
NOB2014 16 11,481 Último mensaje 20 Enero 2014, 23:37 pm
por leosansan
funcion limpiar buffer de teclado
Programación C/C++
Locura_23 8 10,370 Último mensaje 15 Octubre 2021, 23:57 pm
por RayR
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines