2016-10-26 3 views
-8

Я пытался выяснить, что не так с моим кодом в течение нескольких дней; Кажется, я не могу найти его. Если утверждения немного меня путают, я думаю, что я их испортил, но все равно не уверен. Все, что я знаю, это то, что я супер в тупике и буду любить всю помощь, которую я могу получить.Не могу понять, почему мой код не работает

#include <stdio.h> 

// function main begins program execution 
int main(void) 
{ 
    int numberOfDays = 0; 
    float numberOfMiles = 0; 
    float milesCharge = 0; 
    float milesTotal = 0; 
    float total = 0; 
    float subtotal = 0; 
    float tax = 0; 

    do { 
     printf("%s", "How many days was car rented?\t"); 
     scanf("%d", &numberOfDays); 
    } while (numberOfDays < 1); 

    do { 
     printf("%s", "How many miles were driven?\t"); 
     scanf("%d", &numberOfMiles); 
    } while (numberOfMiles > 1); 

    if (numberOfMiles > 1 || numberOfMiles < 200) { 
     milesTotal = numberOfMiles * .40; 
    } else { 
     milesTotal = numberOfMiles * .35; 
    } 

    subtotal = milesTotal + numberOfDays * 15; 
    tax = subtotal * .06; 
    total = tax + subtotal; 

    printf("\nSubtotal:\t\t\t$%.2f\n", subtotal); 
    printf("Tax Amount:\t\t\t$%.2f\n", tax); 
    printf("Total:\t\t\t\t$%.2f\n", total); 
    printf("\n"); 
} 
+2

Пожалуйста, поставьте на вход и вывод, который вы ожидаете, и что вы пытались сделать для отладки вашей программы до сих пор? – galfisher

+1

Я не C-кодер, но он выглядит так, как будто (numberOfDays <1) будет работать вечно, поскольку число дней не увеличивается. Бесконечная петля. – rob

+0

Добро пожаловать в StackOverflow! Мы хотели бы помочь, но нам нужно, чтобы вы рассказали нам, где проблема, в чем проблема, и что вы ожидаете увидеть от программы. Не позволяйте нисходящим голосам добираться до вас, они происходят только потому, что вы не предоставили нам то, что нам нужно, чтобы помочь вам. :) – SnakeDoc

ответ

3

Если numberOfMiles должен быть типа float вы должны обменять следующую строку

scanf("%d", &numberOfMiles); 

по

scanf("%f", &numberOfMiles); 

или вы можете установить тип в int.

-

Если вы хотите, чтобы избежать бесконечного цикла, обмен

} while (numberOfMiles > 1); 

по

} while (numberOfMiles < 1); 

КСТАТИ. почему бы не позволить расстояния, которые меньше мили?

например. по

} while (numberOfMiles < 0); 

Для более конкретных ответов вы должны быть более точными.

1

Компиляция программы с НКУ дает следующее предупреждение:

t.c: In function ‘main’: 
t.c:21:5: warning: format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘float *’ [-Wformat=] 
    scanf("%d", &numberOfMiles); 
    ^

Проблема заключается в том, что зсапЕ() сохранит введенный номер в месте numberOfMiles используя двоичный формат используется для Int переменных , но numberOfMiles - это переменная float. Целочисленный битовый шаблон, интерпретируемый как float, вероятно, будет иметь совсем другое значение или даже может быть незаконным значением float.

Изменение типа numberOfMiles от float до int устраняет эту проблему.

Вы также должны изменить второе условие при while (numberOfMiles < 1).

Надеюсь, это поможет.

73, Марио

Смежные вопросы