C程序将无法正确划分两个scanf输入

问题描述 投票:-2回答:1

我正在尝试创建一个程序,以供用户分配使用的三加仑油箱所使用的加仑和行驶的英里数。我遇到的问题是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 */
c for-loop scanf division
1个回答
1
投票

C和C ++没有惰性评估。因此,如果您这样做:

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

它不会给您miles / gallons的平均值。

相反,第一行将assign用这些变量在特定时刻具有的值除以miles / gallons(即0.0 / 0.0,这将产生非数字或[C0 ])。

您要执行此操作:

NaN

现在除法scanf("%f", &miles); scanf("%f", &gallons); ave_miles = miles / gallons; printf("%f\", ave_miles); 将为您提供所有这些变量所保持的平均值。


0
投票

您可以使用fgets函数进行字符串输入:miles / gallons

© www.soinside.com 2019 - 2024. All rights reserved.