Программа на C не будет правильно делить два входа в scanf - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать программу, которая будет использовать введенные пользователем галлоны и мили, пройденные за три танка для выполнения задания. Проблема, с которой я столкнулся, заключается в том, что цикл for либо неправильно делит два значения, указанные во входных данных, на третье значение (среднее число миль на галлон), либо программа неправильно обращается к входным данным. Но я все еще новичок в этом, поэтому я не уверен, где находится проблема.


    for(i = 1; i <= 3; ++i)
    {
        /* Define calculations */
        /* ------------------- */

        ave_miles = miles / gallons;
        total_miles = total_miles + miles;
        total_gallons = total_gallons + gallons;
        total_ave_miles = total_miles / total_gallons;

        /* Propmpt user for miles and gallons used and calculate miles per gallon. */
        /* ----------------------------------------------------------------------- */

        printf("Enter the number of gallons used for Tank #%i: ", i);
        scanf("%f", &gallons);
        while ( (c = getchar() != '\n') && c != EOF);

        printf("Enter the number of miles driven: ");
        scanf("%f", &miles);
        while ( (c = getchar() != '\n') && c != EOF);

        printf("*** The miles per gallons for this tank is %.1f\n\n", ave_miles);
    } /* end for loop */

    /* Display and calculate the total miles per gallon for the three tanks. */

    printf("Your overall average of miles per gallon for three tanks is %.1f\n\n", total_ave_miles);
    printf("Thank You for using the program. Goodbye.\n");

} /* end main */

1 Ответ

1 голос
/ 30 сентября 2019

C и C ++ не имеют отложенной оценки. Поэтому, если вы сделаете это:

ave_miles = miles / gallons;
scanf("%f", &miles);
scanf("%f", &gallons);
printf("%f\", ave_miles);

Это не даст вам среднее значение miles / gallons.

Вместо этого в первой строке будет назначить делениеmiles / gallons со значением, которое эти переменные имеют в данный конкретный момент (то есть 0.0 / 0.0, что приведет к , а не к числу или NaN).

Вы хотите сделать это:

scanf("%f", &miles);
scanf("%f", &gallons);
ave_miles = miles / gallons;
printf("%f\", ave_miles);

Теперь деление miles / gallons даст вам среднее значение того, что содержат эти переменные.

...