PDA

Ver la versión completa : Problema de Principiante



Indaganster
15-05-2009, 23:10
Hola a todos:
al comenzar en este mundo de la programacion me he topado con el siguiente problema con la sentencia while y el uso de un valor centinela para terminar el siguiente programa.

#include <stdio.h>
#include <conio.h>
int main()
{
int GalTanque,KmTanque,PromTanque,PromTotal;
int TotalKm=0,TotalGal=0;
const int centinela=-1;

while(GalTanque!=centinela) {
printf("\nTeclea los galones usados por este tanque: ");
scanf("%d",&GalTanque);
TotalGal=TotalGal+GalTanque;
printf("\nTeclea los kilometros recorridos: ");
scanf("%d",&KmTanque);
TotalKm=TotalKm+KmTanque;

PromTanque=KmTanque/GalTanque;
printf("\nLos Km/Gal usados por este tanque son: %d",PromTanque);
}
PromTotal=TotalKm/TotalGal;
printf("Km/Gal de todos los tanques es: %d",PromTotal);

getch();
return 0;
}
Mi problema es que al insertar el valor sentinela el programa se sigue ejecutando, realiza los calculos con dicho valor y despues termina.
Espero alguien me pueda ayudar a corregir este problema

Saludos

Marchi
16-05-2009, 01:27
Hola Indaganster, el problema es por que la evaluacion de la condicion se hace al inicio de cada bucle, y la entrada del valor que deberia detener la ejecucion es de las primeras instrucciones del bucle, pero posterior a la evaluacion de la condicion.

Creo que necesitas volver a ver el funcionamiento del while, por que es bastante claro que va a suceder lo que comentas.


La forma mas simple de solucionarlo es:



while(1) {

printf("\nTeclea los galones usados por este tanque: ");
scanf("%d",&GalTanque);
if(GalTanque==-1) {

if(!TotalGal) TotalGal++;
break;
}
TotalGal=TotalGal+GalTanque;
printf("\nTeclea los kilometros recorridos: ");
scanf("%d",&KmTanque);
TotalKm=TotalKm+KmTanque;

PromTanque=KmTanque/GalTanque;
printf("\nLos Km/Gal usados por este tanque son: %d",PromTanque);
}


if(!TotalGal) TotalGal++;

Es para evitar una division por cero.


Saludos