Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/07/2013, 06:51
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Problema en el bucle while

Es un tema que ha salido varias veces en este foro; cuando entras por teclado con scanf la funcion lee el formato que le digas hasta encontrar un salto de linea (un enter); la lectura de stdin se comporta como una cola f.i.f.o.: caracter que lee caracter que saca sabiendo que el primer caracter que entra es el primero que sale. Por eso cuando lees %d se deja el salto de linea al final y en el siguiente scanf es el primero que encuentra y por tanto parece que salte el scanf. Se soluciona limpiando el stream de entrada

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5. double media(double a, double b, double c);
  6. void buida_bufer_teclat() {
  7.     char c;
  8.     do {
  9.         c = getchar();
  10.     } while (c != '\n');
  11. }
  12.  
  13.  
  14. int main() {
  15.     double a, b, c, d;
  16.     char s_n = ' ';
  17.  
  18.     while(s_n != 'n') {
  19.         printf("Inserte 3 numeros:\n");
  20.         scanf("%lf %lf %lf",&a, &b, &c);
  21.         buida_bufer_teclat();
  22.  
  23.         d = media(a, b, c);
  24.         printf("%.2lf\n",d);
  25.         printf("Volver a empezar? (s/n)\n");
  26.         scanf("%c", &s_n);
  27.         buida_bufer_teclat();
  28.     }
  29.  
  30.     return 0;
  31. }
  32.  
  33. double media (double a, double b, double c)
  34. {
  35.     double med = (a + b + c) / 3;
  36.     return med;
  37. }

De la funcion buida_bufer_teclat() puedes encontrar mil versiones por ahi, todas hacen lo mismo.


"...El problema esta en que no me deja si triar..."

En vez de 'triar' puedes poner 'optar' que se escribe igual y al menos significa algo :)

Saludos
vosk