user3765259
user3765259

Reputation: 21

Can someone point out a small logic error to me?

I am doing the following program out of a book and don't understand where I am going wrong with it. Can someone please point out to me some mistake in logic that I am missing?

Develop a program that will input the miles driven and gallons used for each tankful. The program should calculate and display the miles per gallon obtained for each tankful. After processing all input information, the program should calculate and print the combined miles per gallon obtained for all tankfuls.

#include <stdio.h>

int main(void) {
    int total = 0, count = 0;
    float gallons_used, mpg, miles;
    while(gallons_used != -1) {
    printf("Enter the gallons used (-1 to end): ");
        scanf("%f", &gallons_used);
        printf("Enter the miles driven: ");
        scanf("%f", &miles);
        mpg = miles / gallons_used;
        printf("Miles / gallon for this tank was %f\n", mpg);
        total += mpg;
        count++;
    }
    total /= count;
    printf("Average miles to the gallon was: %d\n", total);
    return 0;
}

Now, It appears that I have the loop just right, up until the point I exit it with the value of -1 because it still asks for the mileage of that tank, and obviously inputting it completely throws off the total at the end.

Upvotes: 1

Views: 99

Answers (4)

haccks
haccks

Reputation: 106092

You are using gallons_used uninitialized. Using uninitialized variables invokes undefined behavior. You need to initialize it first before comparing it in while's conditional expression. You can do this as

printf("Enter the gallons used (-1 to end): ");
scanf("%f", &gallons_used);           // Reading value for gallons_used

while(gallons_used != -1) {
    printf("Enter the miles driven: ");
    scanf("%f", &miles);
    mpg = miles / gallons_used;
    printf("Miles / gallon for this tank was %f\n", mpg);
    total += mpg;
    count++;
    printf("Enter the gallons used (-1 to end): ");
    scanf("%f", &gallons_used);
}  

Upvotes: 0

David C. Rankin
David C. Rankin

Reputation: 84579

#include <stdio.h>

int main(void) {
    int total = 0, count = 0;
    float gallons_used, mpg, miles;
    while(gallons_used != -1) {
    printf("Enter the gallons used (-1 to end): ");
        scanf("%f", &gallons_used);
        if (gallons_used < 0)             // check gallons_used
            break;
        printf("Enter the miles driven: ");
        scanf("%f", &miles);
        mpg = miles / gallons_used;
        printf("Miles / gallon for this tank was %f\n", mpg);
        total += mpg;
        count++;
    }
    total /= count;
    printf("Average miles to the gallon was: %d\n", total);
    return 0;
}

Upvotes: 0

ETFovac
ETFovac

Reputation: 111

while(true) {
printf("Enter the gallons used (-1 to end): ");
    scanf("%f", &gallons_used);
    printf("Enter the miles driven: ");
    scanf("%f", &miles);
    if(gallons_used== -1 )break;
    mpg = miles / gallons_used;
    printf("Miles / gallon for this tank was %f\n", mpg);
    total += mpg;
    count++;
}

Upvotes: 1

StackOverflower
StackOverflower

Reputation: 5781

You can use an infinite loop and break it just in case gallons_used = -1

for(;;) { // <-- infinite loop
    printf("Enter the gallons used (-1 to end): ");
    scanf("%f", &gallons_used);
    if (gallons_used == -1)
        break; // <-- exit the loop
    printf("Enter the miles driven: ");
    scanf("%f", &miles);
    mpg = miles / gallons_used;
    printf("Miles / gallon for this tank was %f\n", mpg);
    total += mpg;
    count++;
}

Upvotes: 2

Related Questions