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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  duda simple (fflush)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: duda simple (fflush)  (Leído 3,425 veces)
Fabi0lo

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
duda simple (fflush)
« en: 21 Septiembre 2012, 22:22 pm »

Buenas, hace unos pocos días empese con C y me tope con una duda

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char ch1, ch2;
  5. printf("Ingrese 1: ");
  6. scanf("%c",&ch1);
  7. printf("Ingrese 2: ");
  8. fflush(stdin);
  9. scanf("%c",&ch2);
  10. printf("%c %c\n", ch1, ch2);
  11.  
  12. return 0;
  13. }
Pero lo que resulta es q al ingresar el primer carácter ch1, automáticamente se salta el 2º scanf con exactamente el mismo carácter q introduje en el 1º scanf.

Se supone que eso debería solucionarse con fflush, pero es exactamente el mismo resultado. No le puse luego antes del 1º scanf, puesto q se supone q el buffer de entrada debería estar limpia, aun poniéndole es lo mismo

Alguien me podría decir en q estoy fallando?


En línea

avesudra


Desconectado Desconectado

Mensajes: 724


Intentando ser mejor cada día :)


Ver Perfil
Re: duda simple (fflush)
« Respuesta #1 en: 22 Septiembre 2012, 00:04 am »

Buenas , esto debe ir en el subforo de C/C++ , en cuanto a la pregunta , la función fflush no está definida para limpiar un estándar de entrada(stdin) si no para un estandar de salida(stdout). De todas maneras te podría decir que usaras fgets + sscanf como dijo en su día un moderador del subforo de C/C++ , aunque para esto lo mejor  es usar la función getchar ya que solo estás cogiendo un carácter, lo otro sería para cadenas, bueno aquí te dejo lo del getchar que decía:
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. char ch1, ch2;
  5. printf("Ingrese 1: ");
  6. ch1 = getchar();
  7. printf("Ingrese 2: ");
  8. ch2 = getchar();
  9. printf("%c %c\n", ch1, ch2);
  10.  
  11. return 0;
  12. }
  13.  

¡Un saludo!


En línea

Regístrate en
Fabi0lo

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
Re: duda simple (fflush)
« Respuesta #2 en: 22 Septiembre 2012, 02:45 am »

ammm... y no lo postié ahí, ups.

Gracias, desconocía de getchar.

No entendí a que te refieres con fflush. He leído en un par de lugares, pero siempre encuentro 2 grupos de personas que se oponen. Siempre hay un grupito q dice q se usa fflush(stdin) para el buffer de entrada cuando se use el scanf e incluso tutoriales lo mencionan (como este: http://www.carlospes.com/curso_de_lenguaje_c/01_11_la_funcion_fflush.php) y otro grupo dice q fflush no se puede usar la entrada stdin, q solo se puede usar para la salida ¿acaso la palabra reservada stdin alguien la invento a lo loco? no entiendo nada, alguien q sepa del tema me lo puede explicar?

Existe el stdin? Porq hay personas q dicen q se usa antes de usar el teclado y otras personas dicen q no se tiene q  usar nunca? 
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: duda simple (fflush)
« Respuesta #3 en: 25 Septiembre 2012, 01:46 am »

Hola! yo creo q la discusion se da nada mas porque la gente que lo usa le funciona y le es comodo(tambien depende bajo que entorno programan), pero la otra parte a la que le gusta leer el manual de la funcion entiende claramente que el comportamiento de fflush no esta definido para stdin.
 
Para evitar discusiones usa este bucle para limpiar el bufer:
Código
  1. while((ch = getchar()) != '\n' && ch != EOF);

Saludos

PD: stdin es un flujo asociado al teclado(cuando veas archivos se te va a ser mas familiar)
En línea

Ahorrate una pregunta, lee el man
Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.935


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


Ver Perfil WWW
Re: duda simple (fflush)
« Respuesta #4 en: 29 Septiembre 2012, 10:15 am »

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Una duda simple
Programación Visual Basic
Jess_Kapria 2 3,406 Último mensaje 27 Octubre 2006, 00:41 am
por Jess_Kapria
Duda simple.
PHP
NaSaRiD15 2 1,697 Último mensaje 1 Septiembre 2008, 04:54 am
por SpiderNet
Duda simple
Scripting
soS_boludo 2 2,207 Último mensaje 14 Noviembre 2008, 15:38 pm
por soS_boludo
Duda simple
Dudas Generales
ANTRUCK 7 3,725 Último mensaje 7 Julio 2011, 09:00 am
por Edu
Ayuda fflush
Programación C/C++
UnchainedGold40 2 2,137 Último mensaje 23 Marzo 2015, 12:56 pm
por eferion
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines