Resultados 1 al 2 de 2

Problema de Principiante

  1. #1 Problema de Principiante 
    Iniciado
    Fecha de ingreso
    May 2009
    Mensajes
    1
    Descargas
    0
    Uploads
    0
    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
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Sep 2003
    Mensajes
    1.384
    Descargas
    21
    Uploads
    5
    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:

    Código:
    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
    - Me desagrada
    - ¿Por qué?
    - No estoy a su altura.
    ¿Ha respondido así alguna vez un hombre?

    Friedrich Nietzsche



    Citar  
     

Temas similares

  1. Respuestas: 2
    Último mensaje: 20-04-2011, 19:23
  2. Consulta de Principiante.
    Por archipaleo en el foro GENERAL
    Respuestas: 7
    Último mensaje: 15-10-2006, 23:26
  3. Ayuda a un principiante
    Por il_dottore en el foro DIGITAL+
    Respuestas: 4
    Último mensaje: 13-09-2006, 04:25
  4. Principiante en el pirateo
    Por diestro en el foro TELEVISION
    Respuestas: 2
    Último mensaje: 25-05-2006, 17:20
  5. Principiante
    Por xik_west en el foro DIGITAL+
    Respuestas: 0
    Último mensaje: 07-04-2006, 21:41

Marcadores

Marcadores