[C] Programma semplice di iterazione while

di Anonimizzato18394 il
4 risposte
Devo scrivere un programma utilizzando l'iterazione while che mi prenda in iterazione come input kilometri percorsi e litri di benzina fatti e mi dia in output il loro rapporto, calcoli la somma totale dei kilometri percorsi e dei litri di benzina fatti fino a quando non inserisco il il valore sentinella -1 e mi dà i totali. Ecco il codice:
#include <stdio.h>
int main ()
{    int km, tot_km = 0;
    float litri, tot_litri = 0, km_l;

        while ( km != -1 ) /*inizio dell'iterazione*/
    {
        printf ( "Quanti kilometri hai percorso dall'ultimo pieno? (-1 per terminare)\n" );
        scanf ( "%d", &km ); /*prende in input i kilometri parziali*/

        if ( km != -1 )       
       {
            printf( "Quanti litri hai fatto all'ultimo pieno di benzina?\n" );
            scanf( "%f", &litri ); /*prende in input i litri parziali*/
            
            km_l = (float) km / litri; /*calcola il rapporto parziale tra litri e kilometri*/
            printf( "Il rapporto km/l dall'ultimo pieno è: %.1f\n", km_l ); /*visualizza il rapporto tra litri e kilometri*/
            tot_km += km; /*calcola la somma parziale dei kilometri totali*/      
            tot_litri += litri; /*calcola la somma parziale dei litri totali*/
            }
    } /*fine dell'iterazione*/

        printf ( "Somma totale km percorsi: %d\n", tot_km );
        printf ( "Somma totale litri di benzina: %f\n", tot_litri );
        printf ( "Media totale kilometri su litro %.1f", (float) tot_km / tot_litri ); /*calcola i totali*/

        return 0;
    }
1) E' giusto mettere l'if nidificato all'interno dell'iterazione per questo scopo? Se non lo mettevo il valore sentinella non funzionava bene, infatti anche se digitavo -1 mi chiedeva un'ultima volta i litri, che non avrebbero dovuto esserci.
2) Se inserisco il valore sentinella come primo valore mi dà come media dei km/l totali -1.$ (i km totali me li da a 0). Perchè?

4 Risposte

  • 1) si

    2) ovvio, perché in quel caso esegui 0/0. Devi controllare che il denominatore sia uguale a zero
  • Se c'è una divisione con zero perché il compilatore non mi dice niente? Non dovrebbe crashare? Il programma funziona di per sé!
  • Il compilatore non lo sa. A runtime non viene gestita la divisione per zero... Ti ho già consigliato di controllare il denominatore con una if
  • Ok grazie, ho capito!
Devi accedere o registrarti per scrivere nel forum
4 risposte