Autor
|
Tema: Fgets para enteros? (Leído 7,952 veces)
|
Sagrini
|
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: char cadena [100]; fgets (cadena , sizeof (cadena ), stdin );
¿Pero para enteros? Se puede seguir utilizando fgets ()? int numero; fgets ((char) numero , sizeof (numero )/4, stdin );
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
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
fgets con stdin + sscanf es la solucion correcta 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
|
Mmm... bastante bien. No habría una forma más... reducida de hacerlo? Gracias!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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++: 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
|
Mmm... me quedo con la primera opción. Ahora, y para obtener un solo carácter? Porque fgetc () no me funciona!
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
|
|
|
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
|
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? #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; } }
$ ./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
|
|
|
|
satu
Desconectado
Mensajes: 301
Siempre aprendiendo
|
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. #include <stdio.h> #include <string.h> int main () { char palabra [7], final [7], car; int cont; 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; car = 0; } while(getchar() != '\n') ; //Aqui igual. Si no pones esta linea no para return 0; }
Saludos
|
|
« Última modificación: 28 Diciembre 2011, 18:48 pm por satu »
|
En línea
|
Breakbeat como forma de vida
|
|
|
Sagrini
|
Muy bueno! A mi se me habia ocurrido hacer:
pero no era nada efectivo jajaja
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema con fgets [Solucionado]
Programación C/C++
|
Søra
|
0
|
2,080
|
22 Mayo 2010, 12:15 pm
por Søra
|
|
|
Duda con buffer utilizado para leer con fgets()
Programación C/C++
|
Gabilan81
|
1
|
2,770
|
25 Septiembre 2010, 22:48 pm
por Ca0s
|
|
|
Problema con fgets
Programación C/C++
|
P.AGCD
|
3
|
3,916
|
14 Julio 2011, 20:41 pm
por kiriost
|
|
|
tipos de enteros en C
« 1 2 »
Programación C/C++
|
lucaslopez0000
|
11
|
5,829
|
20 Diciembre 2012, 02:24 am
por rir3760
|
|
|
[C] Arreglos de m*n enteros
« 1 2 »
Programación C/C++
|
GGZ
|
11
|
4,391
|
2 Octubre 2015, 18:06 pm
por GGZ
|
|