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().-
#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
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:
while(scanf("%s",frase) > 0)
{
printf("\n\t%s\n\t",frase);
}
recuerda que while evalúa la condición primero y si resulta verdadera se realiza lo que está entre corchetes.
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
si usas gets ?
Hola
Gracias por tu sugerencia pero para el caso usaría
fgets(cadena, maximo, stdin);
Que me parece perfecta, lo que pasa es que quiero hacerlo con scanf para aprender algo nuevo.-
Saludos.
Daniel
Puedes usar:
#include <stdio.h>
int main(void)
{
char buffer[100];
printf("Cadena : ");
scanf("%100[^\n]", buffer);
printf("Cadena : [%s]\n", buffer);
return 0;
}
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í.
programa.exe < mientrada.txt
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.
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
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
Return Value
On success, the function returns the number of items succesfully read. This count can match the expected number of readings or fewer, even zero, if a matching failure happens.
In the case of an input failure before any data could be successfully read, EOF is returned.
http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ (http://www.cplusplus.com/reference/clibrary/cstdio/scanf/)