[C con Clase] Duda con while y número centinela.

Sebastián toledanosebastian en gmail.com
Sab Jun 7 22:44:52 CEST 2014


Buenas tardes a todos. Recientemente me interese por la programación
orientada a objetos y sabiamente me recomendaron comenzar con lenguaje
C. Descubrí que me apasiona este tipo de lenguaje. 
Necesito ayuda con el siguiente ejercicio:

código en C:
 #include <stdio.h>

/*
 * El objetivo es obtener el promedio de n kilometros por litro de
combustible para cada tanque.
 * El promedio general de n kilometros por litro, obtenido de todos los
tanques y salir.
*/

int main(){
   
   float prom_T, prom_G, litros, total_litros=0;
   int kilometros, total_kilometros=0, contador=0, tanque=0;
   
   while(litros != -1){
      contador = ++tanque;
      printf("TANQUE %d: Ingrese los litros consumidos(ó -1): ",
contador);
      scanf("%f", &litros);
      
         if(litros == -1){
            prom_G = total_kilometros / total_litros;
            printf("\n\nEl promedio gral. de K/L es: %.1f Kilometros",
prom_G);
            return 0;
         }
            
      printf("..........Ingrese los kilometros recorridos: ");
      scanf("%d", &kilometros);
      prom_T = (float) kilometros / litros;
      printf("..........Los kilometros/litro para este tanque fueron:
%.1f Kilometros\n\n", prom_T);
      total_litros = (float)total_litros + litros;
      total_kilometros = total_kilometros + kilometros;
      
   }
   
return 0;

} 

El programa hace lo que se le pide, para hacerlo me basé en algunos de
los recursos aprendidos hasta el momento del mencionado ejercicio, es
decir: el uso de la instrucción while, el uso del número centinela y el
uso de la biblioteca estándar <stdio.h>. El problema es que para que
funcione me vi obligado a anidar la función if dentro de while y
escribir return 0 al final de if. De otro modo, cada vez que ingresaba
el número centinela, el progrma me pedía ingresar los kilómetros
recorridos y recién entonces mostraba el promedio general (resultado
incorrecto) y salía. Sospecho que la solución que encontré es una
aberración al lenguaje, un mal uso de las funciones while, if y return
0. Esta duda me mantiene bloqueado y hasta que no la despeje, no debo
continuar.

                El ejercicio es el 3:17. Ejercicio 17 del capítulo 3 del
                manual "Como programar en C/C++" por H. M. Deitel y P.
                J. Deitel.   


  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140607/e9943a51/attachment.html>


Más información sobre la lista de distribución Cconclase