elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 22:24  


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Fgets para enteros?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Fgets para enteros?  (Leído 899 veces)
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Fgets para enteros?
« en: 23 Diciembre 2011, 11:02 »

Buenas! Estaba intentando resolver una duda de un compañero sobre scanf () y he pensado... ¿cómo puedo hacer para obtener números enteros con fgets ()?
Para cadenas está muy claro:
Código
char cadena [100];
fgets (cadena, sizeof (cadena), stdin);
printf ("%s", cadena);
 
¿Pero para enteros? Se puede seguir utilizando fgets ()?
Código
int numero;
fgets ((char) numero, sizeof (numero)/4, stdin);
printf ("%d", numero);
 
Creo que no xD. A ver, fgets () se usa para cadenas, así que tenemos que buscar otra función. Scanf no vale porque si escribes una letra se te van abajo todos los demás scanf que tengas en el programa. ¿Qué se os ocurre? Estaba pensando en formatear el resultado de fgets, pero estamos en las mismas...


En línea

Un saludo. Sagrini
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.391


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #1 en: 23 Diciembre 2011, 11:54 »

fgets con stdin + sscanf es la solucion correcta  :)

Código
char cadena [100];
int numero = 0;
fgets (cadena, sizeof (cadena), stdin);
sscanf(cadena, "%d", &numero);


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
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #2 en: 23 Diciembre 2011, 12:24 »

Mmm... bastante bien. No habría una forma más... reducida de hacerlo?
Gracias!
En línea

Un saludo. Sagrini
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.391


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #3 en: 23 Diciembre 2011, 12:31 »

Por la consola siempre se escriben caracteres asi que a la vista o no eso hay que hacerlo (leer la cadena y pasarla a entero). Podes meter ese codigo en una funcion ... o en C++:

Código
int numero = 0;
cin >> numero;
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
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #4 en: 28 Diciembre 2011, 12:48 »

Mmm... me quedo con la primera opción. Ahora, y para obtener un solo carácter? Porque fgetc () no me funciona!
En línea

Un saludo. Sagrini
Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 4.391


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #5 en: 28 Diciembre 2011, 12:55 »

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

http://www.cplusplus.com/reference/clibrary/cstdio/getchar/
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
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #6 en: 28 Diciembre 2011, 13:37 »

Al usar getchar () o fgetc () (como también scanf () y demás) se "salta" un ciclo sin esperar respuesta del usuario, lo cual me gustaría evitar. ¿Qué hago?

Código
#include <stdio.h>
#include <string.h>
 
int main ()
{
   char palabra [7], final [7], car; int cont; memset (final, '-', 6); final [6] = '\0';
   printf ("Escribe una palabra (lenght -7 chars): "); fgets (palabra, 7, stdin); palabra [6] = '\0';
 
   while (strcmp (palabra, final) != 0)
   {
           printf ("\nEscribe una letra: "); car=getchar (); // car = fgetc (stdin);
           for (cont=0; cont<6; cont++)    { if (car == palabra [cont]) final [cont] = car; }
           printf ("%s\n", final); car = 0;
   }
 
   printf ("Well done! ;)\n\n"); getchar (); return 0;
}
 
Código:
$ ./code
Escribe una palabra (lenght -7 chars): willix

Escribe una letra: ------

Escribe una letra: w
w-----

Escribe una letra: w-----

Escribe una letra: i
wi--i-

Escribe una letra: wi--i-

Escribe una letra: l
willi-

Escribe una letra: willi-

Escribe una letra: x
willix
Well done! ;)
$
En línea

Un saludo. Sagrini
satu

Desconectado Desconectado

Mensajes: 263

Siempre aprendiendo


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #7 en: 28 Diciembre 2011, 13:59 »

Hola

Lo que pasa es que en cada getchar() introduces un caracter y un Enter y el getchar lee sólo el carácter, entonces en el siguiente getchar() se encuentra en el búffer de entrada el '\n' por lo que "salta". Lo que debes hacer es limpiar ese búffer, eso sí, no utilices fflush.

Código
#include <stdio.h>
#include <string.h>
 
int main ()
{
   char palabra [7], final [7], car;
   int cont;
 
   memset (&final, '-', 6);
   final [6] = '\0';
 
   printf ("Escribe una palabra (lenght <7 chars): ");
   fgets (palabra, 7, stdin);
   palabra [6] = '\0';
 
   while (strcmp (palabra, final) != 0)
   {
           while(getchar() != '\n') ; // Fijate en el ;
 
           printf ("\nEscribe una letra: ");
           car = getchar (); // car = fgetc (stdin);
 
           for (cont=0; cont<6; cont++)
               if (car == palabra [cont])
                   final [cont] = car;
           printf ("%s\n", final);
           car = 0;
   }
 
   printf ("Well done! ;)\n\n");
 
   while(getchar() != '\n') ; //Aqui igual. Si no pones esta linea no para
   getchar();
   return 0;
}
 

Saludos
« Última modificación: 28 Diciembre 2011, 18:48 por satu » En línea

Breakbeat como forma de vida
Sagrini

Desconectado Desconectado

Mensajes: 104

Visit las Vegas ;)


Ver Perfil WWW
Re: Fgets para enteros?
« Respuesta #8 en: 28 Diciembre 2011, 17:02 »

Muy bueno! A mi se me habia ocurrido hacer:
Código
while (getchar () != 0) car=getchar ();
pero no era nada efectivo jajaja
En línea

Un saludo. Sagrini
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
php + fgets
Programación General
dnebla 3 755 Último mensaje 3 Diciembre 2005, 00:44
por Ragnarok
Problema con el uso de fgets
Programación C/C++
novalida 5 1,871 Último mensaje 2 Diciembre 2008, 14:04
por novalida
Problema con fgets
Programación C/C++
Pracc1 9 1,902 Último mensaje 2 Diciembre 2009, 22:04
por nicolas_cof
Duda con buffer utilizado para leer con fgets()
Programación C/C++
Gabilan81 1 868 Último mensaje 25 Septiembre 2010, 22:48
por Ca0s
Problema con fgets
Programación C/C++
P.AGCD 3 1,144 Último mensaje 14 Julio 2011, 20:41
por kiriost
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines