Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lucians en 6 Junio 2015, 15:35 pm



Título: Duda sobre do while
Publicado por: lucians en 6 Junio 2015, 15:35 pm
Hola tengo un problema ya que al intentar decirle al usuario que si quiere continuar o no , me lo salta sin mas.

Codigo:

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define E 166.67
  4. int main ()
  5.  
  6. {
  7. char res,moneda;
  8. float valor,cambio;
  9.  
  10. do
  11. {
  12. printf("Si desea de E a PTA introduzca E, si desea de PTA a E introduzca P.\n");
  13. scanf("%c",&moneda);
  14. if (moneda=='E')
  15. {
  16. printf("Introduce la cantidad de euros a convertir en pesetas:\n");
  17. scanf("%f",&valor);
  18. cambio=valor*E;
  19. printf("%.2f euros son %.2f pesetas.\n",valor,cambio);
  20. }
  21. if (moneda=='P')
  22. {
  23. printf("Introduce la cantidad de pesetas a convertir en euros:\n");
  24. scanf("%f",&valor);
  25. cambio=valor/E;
  26. printf("%.2f pesetas son %.2f euros.\n",valor,cambio);
  27. }
  28. printf("Quiere seguir calculando? S / N?\n");
  29. scanf("%c",&res);
  30. }while (res=='N');
  31.  
  32. system("pause");
  33. }
No me deja igresar si quiero continuar o no S o N.

Mod: los códigos van en GeSHi


Título: Re: Duda sobre do while
Publicado por: bash en 6 Junio 2015, 16:05 pm
primero que todo usa GESHI  para que se vea mejor el codigo y se mas legible
segundo trata de inicializar las variables antes de usarlas ,


Título: Re: Duda sobre do while
Publicado por: user-marcos en 6 Junio 2015, 16:14 pm
Tienes un fallo grande
Código
  1. while (res=='N')
, quieres decir que se va a repetir siempre que el usuario te diga que no quiere seguir, tienes que poner
Código
  1. while (res != 'N')


Título: Re: Duda sobre do while
Publicado por: antkk en 6 Junio 2015, 17:14 pm
Es más legible usar un while que un do while, acostúmbrate a while.


Título: Re: Duda sobre do while
Publicado por: engel lex en 6 Junio 2015, 17:20 pm
Es más legible usar un while que un do while, acostúmbrate a while.

no tienen la misma utilidad, ambos tienen su forma de usarse y la legibilidad no es el problema aquí


Título: Re: Duda sobre do while
Publicado por: lucians en 6 Junio 2015, 17:40 pm
Soy nuevo en esto de la programacion y no conozco esas funciones avanzadas.
Aunque lo ejecute con 
Código:
while (res != 'N')
no va!!!!


Título: Re: Duda sobre do while
Publicado por: lucians en 6 Junio 2015, 17:42 pm
Lo que digo es que no me deja introducir un S o un N para continuar o no.
Solo eso.
Les agradecería mucho si me ayudan.


Título: Re: Duda sobre do while
Publicado por: user-marcos en 6 Junio 2015, 17:47 pm
Tienes que limpiar el buffer


Título: Re: Duda sobre do while
Publicado por: user-marcos en 6 Junio 2015, 17:52 pm
Mira como si que te va, lo que pasa que te he puesto cosas de c++

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define E 166.67
  4. #include <iostream>
  5. #define limpiarBuffer(){while(cin.get() != '\n');}
  6. using namespace std;
  7. int main ()
  8.  
  9. {
  10. char res,moneda;
  11. float valor,cambio;
  12.  
  13. do
  14. {
  15. printf("Si desea de E a PTA introduzca E, si desea de PTA a E introduzca P.\n");
  16. scanf("%c",&moneda);
  17. limpiarBuffer();
  18. if (moneda=='E')
  19. {
  20. printf("Introduce la cantidad de euros a convertir en pesetas:\n");
  21. scanf("%f",&valor);
  22. limpiarBuffer();
  23. cambio=valor*E;
  24. printf("%.2f euros son %.2f pesetas.\n",valor,cambio);
  25. }
  26. if (moneda=='P')
  27. {
  28. printf("Introduce la cantidad de pesetas a convertir en euros:\n");
  29. scanf("%f",&valor);
  30. limpiarBuffer();
  31. cambio=valor/E;
  32. printf("%.2f pesetas son %.2f euros.\n",valor,cambio);
  33. }
  34. printf("Quiere seguir calculando? S / N?\n");
  35. scanf("%c",&res);
  36. limpiarBuffer();
  37. }while (res!='N');
  38.  
  39.  
  40. }
  41.  
Adatpatalo a c


Título: Re: Duda sobre do while
Publicado por: lucians en 6 Junio 2015, 18:22 pm
Muchísimas gracias, teníais razón, había que limpiar el bufe. Le he puesto
Código:
 fflush(stdin)
antes de los
Código:
printf
y va perfecto.
¡¡¡Muchísimas gracias!!!  :D



Título: Re: Duda sobre do while
Publicado por: rir3760 en 9 Junio 2015, 04:04 am
Muchísimas gracias, teníais razón, había que limpiar el bufe. Le he puesto
Código:
 fflush(stdin)
antes de los
Código:
printf
y va perfecto.
fflush(stdin) no se recomienda, las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Tu problema se genera porque "%c" no descarta el espacio blanco antes de consumir los caracteres validos para la conversión indicada. Por ejemplo si al pedir el tipo de conversión introduces:
Código:
E{ENTER}
La primera llamada a scanf consume el carácter 'E', el carácter '\n' generado al presionar {ENTER} se queda en el bufer de la entrada estándar y es consumido por la segunda llamada a scanf.

Para evitarlo basta con utilizar " %c" en las dos llamadas a scanf.

Un saludo