Duda sobre do while

Iniciado por lucians, 6 Junio 2015, 15:35 PM

0 Miembros y 2 Visitantes están viendo este tema.

lucians

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 (cpp) [Seleccionar]
#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

bash

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 ,
gracias por responder mis dudas

user-marcos

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')

antkk

Es más legible usar un while que un do while, acostúmbrate a while.

engel lex

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í
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

lucians

Soy nuevo en esto de la programacion y no conozco esas funciones avanzadas.
Aunque lo ejecute con 
while (res != 'N')
no va!!!!

lucians

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.

user-marcos

Tienes que limpiar el buffer

user-marcos

Mira como si que te va, lo que pasa que te he puesto cosas de c++

Código (cpp) [Seleccionar]

#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

lucians

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