Hola tengo un problema ya que al intentar decirle al usuario que si quiere continuar o no , me lo salta sin mas.
Codigo:
#include<stdio.h>
#include<stdlib.h>
#define E 166.67
int main ()
{
char res,moneda;
float valor,cambio;
do
{
printf("Si desea de E a PTA introduzca E, si desea de PTA a E introduzca P.\n");
scanf("%c",&moneda);
if (moneda=='E')
{
printf("Introduce la cantidad de euros a convertir en pesetas:\n");
scanf("%f",&valor);
cambio=valor*E;
printf("%.2f euros son %.2f pesetas.\n",valor,cambio);
}
if (moneda=='P')
{
printf("Introduce la cantidad de pesetas a convertir en euros:\n");
scanf("%f",&valor);
cambio=valor/E;
printf("%.2f pesetas son %.2f euros.\n",valor,cambio);
}
printf("Quiere seguir calculando? S / N?\n");
scanf("%c",&res);
}while (res=='N');
system("pause");
}
No me deja igresar si quiero continuar o no S o N.
Mod: los códigos van en GeSHi
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 ,
Tienes un fallo grande while (res=='N')
, quieres decir que se va a repetir siempre que el usuario te diga que no quiere seguir, tienes que poner while (res != 'N')
Es más legible usar un while que un do while, acostúmbrate a while.
Cita de: antkk en 6 Junio 2015, 17:14 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í
Soy nuevo en esto de la programacion y no conozco esas funciones avanzadas.
Aunque lo ejecute con
while (res != 'N')
no va!!!!
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.
Tienes que limpiar el buffer
Mira como si que te va, lo que pasa que te he puesto cosas de c++
#include<stdio.h>
#include<stdlib.h>
#define E 166.67
#include <iostream>
#define limpiarBuffer(){while(cin.get() != '\n');}
using namespace std;
int main ()
{
char res,moneda;
float valor,cambio;
do
{
printf("Si desea de E a PTA introduzca E, si desea de PTA a E introduzca P.\n");
scanf("%c",&moneda);
limpiarBuffer();
if (moneda=='E')
{
printf("Introduce la cantidad de euros a convertir en pesetas:\n");
scanf("%f",&valor);
limpiarBuffer();
cambio=valor*E;
printf("%.2f euros son %.2f pesetas.\n",valor,cambio);
}
if (moneda=='P')
{
printf("Introduce la cantidad de pesetas a convertir en euros:\n");
scanf("%f",&valor);
limpiarBuffer();
cambio=valor/E;
printf("%.2f pesetas son %.2f euros.\n",valor,cambio);
}
printf("Quiere seguir calculando? S / N?\n");
scanf("%c",&res);
limpiarBuffer();
}while (res!='N');
}
Adatpatalo a c
Muchísimas gracias, teníais razón, había que limpiar el bufe. Le he puesto
fflush(stdin)
antes de los printf
y va perfecto.
¡¡¡Muchísimas gracias!!! :D
Cita de: lucians en 6 Junio 2015, 18:22 PM
Muchísimas gracias, teníais razón, había que limpiar el bufe. Le he puesto
fflush(stdin)
antes de los 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:
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