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


 


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  ¿Para qué sirve la función getchar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Para qué sirve la función getchar?  (Leído 56,508 veces)
Bb-7

Desconectado Desconectado

Mensajes: 38


Ver Perfil
¿Para qué sirve la función getchar?
« en: 15 Febrero 2008, 18:59 »

Pos justamente éso.
He visto un ejemplo que había en un curso de C, pero no especificaba para qué servía el 'getchar();'. Éste es el ejemplo:

#include <stdio.h>

int main()
     {
     char ch;
     char nombre[20], apellido[20], telefono[10];
     printf( "Escribe tu nombre: " );
     scanf( "%[A-Z]s", nombre );
     printf( "Lo que recogemos del scanf es: %s\n", nombre );
     printf( "Lo que había quedado en el buffer: " );
     while( (ch=getchar())!='\n' )
            printf( "%c", ch );
     }


Y lo que daba el programa era ésto:

Escribe tu nombre: GORka
Lo que recogemos del scanf es: GOR
Lo que había quedado en el buffer: ka

Ya sé para qué sirven las demás funciones (scanf, printf, etc.). Sólo quiero saber para qué sirve getchar();.

Saludos y gracias.


En línea





Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: ¿Para qué sirve la función getchar?
« Respuesta #1 en: 15 Febrero 2008, 19:10 »

http://www.conclase.net/c/librerias/funcion.php?fun=getchar


En línea

AxXioma


Desconectado Desconectado

Mensajes: 796


Algunos pájaros no pueden ser enjaulados...


Ver Perfil
Re: ¿Para qué sirve la función getchar?
« Respuesta #2 en: 17 Febrero 2008, 00:29 »

Sirve para almacenar en una variable un caracter escrito mediante el teclado, un ejemplo:

Código:
#include <stdio.h>
{
char letra;

letra = getchar();
putchar(letra);
}

putchar imprime en pantalla lo que has introducido.

Saludos
En línea





.::Cuanto mas conocimiento adquieres, más te das cuenta del que hay a tu alrededor::.
zonahurbana

Desconectado Desconectado

Mensajes: 140

RS, JC.


Ver Perfil WWW
Re: ¿Para qué sirve la función getchar?
« Respuesta #3 en: 17 Octubre 2012, 06:29 »

Iba a crear un tema nuevo. Pero la duda es exactamente la misma.

Tengo entendido que al ingresar datos y presionar Enter, éste último es tomado como entrada (también). Y por ello es necesario limpiar el buffer.

Sin embargo, no comprendo muy bien cómo es que funciona getchar();
Es decir, no sólo quisiera saber la finalidad por la que se usado getchar, sino más bien, qué es lo que hace exactamente. Es decir, toma un caracter del buffer, pero si éste está vacío, le solicita al usuario que ingrese uno, ¿es más o menos así?

Dispongo de dos códigos para limpiar el buffer.

Código:
char ch;
while (cin.get(ch) && ch != '\n')
 ;

Código:
while (getchar() != '\n');

Duda #1. Quisiera saber cómo es el mecanismo interno (minucioso) de todo el proceso que ejecutan cada una de esas instrucciones (aunque no las hay, porque yo sólo veo un while, ¿será que getchar() y cin.get tienen la capacidad de suprimir caracteres?).

Duda #2. ¿En qué casos es necesario limpiar el buffer? ¿Por qué?

Duda #3. ¿Es lo mismo buffer que stream? ¿Y qué es un flujo?

Una duda un poco más alejada del tema:
Duda #4. Cuando declaro variables de un tipo y el usuario ingresa datos de otro tipo, en muchas ocasiones se entra en un bucle infinito, lo que normalmente no ocurriría si el usuario ingresara lo que se le solicita. O también ocurre esto cuando el usuario ingresa más contenido del permitido. ¿Cómo podría yo asegurar la entrada correcta de datos? Por ejemplo, usar isalpha o isdigit no tiene sentido en este caso, ya que esa comprobación sólo la podría hacer yo luego de que ya se ha ejecutado el cin>> (¿O sí es posible usarlos sobre el valor que se está tratando de ingresar justamente antes de almacenarlo?).

PD: Siempre veo que recomiendan enlaces de conclase, y yo nunca he podido ingresar (de ninguno de mis navegadores). ¿Sólo yo no lo puedo ver?

Muchas gracias de antemano. Espero puedan responderme!
En línea

Aprendiendo de a pocos ...
do-while


Desconectado Desconectado

Mensajes: 962


¿Habra que sacarla de paseo?


Ver Perfil
Re: ¿Para qué sirve la función getchar?
« Respuesta #4 en: 17 Octubre 2012, 08:45 »

Duda #4. Cuando declaro variables de un tipo y el usuario ingresa datos de otro tipo, en muchas ocasiones se entra en un bucle infinito, lo que normalmente no ocurriría si el usuario ingresara lo que se le solicita. O también ocurre esto cuando el usuario ingresa más contenido del permitido. ¿Cómo podría yo asegurar la entrada correcta de datos? Por ejemplo, usar isalpha o isdigit no tiene sentido en este caso, ya que esa comprobación sólo la podría hacer yo luego de que ya se ha ejecutado el cin>> (¿O sí es posible usarlos sobre el valor que se está tratando de ingresar justamente antes de almacenarlo?).

Tendras distintas opciones dependiendo del lenguaje:

C: scanf devuelve un valor indicando cuantos de los datos especificados se han leido. Devolvera un valor menor al numero de elementos de la lista de parametros que debe leer si: hay un error de lectura, el parametro no corresponde con el especificador de tipo o se encuentra EOF.

Por lo tanto, si quieres asegurarte de que los datos que lees son correctos, te recomiendo leer los datos de uno en uno y comprobar si se han leido de forma correcta comprobando el valor devuelto por scanf. Por ejemplo:
Código
  1. int entero,lector;
  2.  
  3. while(!scanf("%d",&entero))
  4. {
  5.    //se ha producido un error en la lectura por alguna de las razones anteriores
  6.    //terminamos de leer los datos que queden en la entrada para la siguiente lectura
  7.    while((lector = getchar()) != '\n' && lector != EOF);
  8. }
  9. //terminamos de leer los datos que queden en la entrada para la siguiente lectura
  10. while((lector = getchar()) != '\n' && lector != EOF);
  11.  

C++: El operador >> activara el failbit, si el tipo leido no coincide con el tipo del parametro o si hay algun tipo de error de lectura:
Código
  1.    int numero;
  2.  
  3.    while((cin >> numero).fail()) //si el leido no coincide con el del parametro o hay algun error
  4.    {
  5.        //resetamos los bits de error
  6.        cin.clear();
  7.  
  8.        //terminamos de leer los datos que quedan en la entrada para poder realizar la siguiente lectura
  9.        while(cin.get() != '\n' && !cin.eof());
  10.    }
  11.    //terminamos de leer los datos que quedan en la entrada para poder realizar la siguiente lectura
  12.    while(cin.get() != '\n' && !cin.eof());
  13.  

¡Saludos!
En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¡Por el culo te la hinco!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
getchar() != EOF
Programación C/C++
Treppe 6 5,218 Último mensaje 20 Julio 2011, 21:48
por rir3760
ayuda con getchar
Programación C/C++
ometeotl 6 2,346 Último mensaje 10 Octubre 2011, 19:46
por ometeotl
Ayuda con getchar:(
Programación C/C++
TopoJunior 5 603 Último mensaje 14 Febrero 2013, 20:53
por durasno
funcion onchange no sirve(resuelto)
Desarrollo Web
basickdagger 5 1,167 Último mensaje 17 Mayo 2013, 19:05
por basickdagger
Problema con while y getchar.
Programación C/C++
Spinerker 3 354 Último mensaje 17 Octubre 2013, 14:18
por Eternal Idol
Powered by SMF 1.1.19 | SMF © 2006-2008, Simple Machines