2014-04-09 4 views
1

Я пробовал неустанно, чтобы все было правильно, но ничего не работает. Многое из того, что я делаю, приводит меня к ошибке «Контроль может дойти до конца не-void функции».Вводная программа на С ++

В принципе, мы создали программу для вывода статистики использования газа. То, что я застрял, это: «Газ будет расти в цене от определенного начального значения до определенного конечного значения в течение 4 лет, а затем останется фиксированным при этом более высоком значении в течение следующих 4 лет».

Я чувствую, что для этого должен быть цикл или функция, но каждый раз, когда я делаю NUM_YEARS int, а не const, независимо от того, что программа сообщает мне, «Control может достичь конца не-void функции».

Ниже программа:

#include <cstdlib> 
#include <iostream> 

using namespace std; 

const int MILES_PER_YEAR = 21000; 
const double CITY_PERCENT = 45.0; 
const double HIGHWAY_PERCENT = 55.0; 
const double CITY_MPG = 51.0; 
const double HIGHWAY_MPG = 45.0; 
const double USABLE_GAS = 9.0; 
const double INITIAL_PRICE = 3.359; 
const double FINAL_PRICE = 6.00; 
const int NUM_YEARS = 8; //This will be the total number of years 

double gasPrice(int day); 

int main(int argc, char * argv[]) { 
    cout << "Driving the Toyota Prius" << endl; 
    double daily_miles = MILES_PER_YEAR/365.0; 
    double daily_city_miles = daily_miles * CITY_PERCENT/100.0; 
    double daily_highway_miles = daily_miles*HIGHWAY_PERCENT/100.0; 
    double daily_gas_consumed = daily_highway_miles/HIGHWAY_MPG + 
    daily_city_miles/CITY_MPG; 
    double gas_in_tank = USABLE_GAS; 
    double price; 
    double amount_purchased; 
    double gallons_purchased; 
    double total_gas_purchases = 0; 

    for(int day = 0;day < 365*8; day++) { //If the day is less than the total number of days     in 8 years, add one day 
     cout << "Driving summary for day " << day << endl; 
     cout << " highway miles: " << daily_highway_miles << endl; 
     cout << " city miles : " << daily_city_miles << endl; 
     cout << " gas consumed : " << daily_gas_consumed << endl; 
     gas_in_tank = gas_in_tank - daily_gas_consumed; 
     cout << " gas in tank : " << gas_in_tank << endl; 

     if (gas_in_tank < 0.0) { 
     cout << " BUY GAS" << endl; 
     gallons_purchased = USABLE_GAS - gas_in_tank; 
     price = gasPrice(day); 
     cout << " price today is : " << price << endl; 
     cout << " Gallons purchased: " << gallons_purchased << endl; 
     cout << " fillup cost  : " << gallons_purchased * price << endl; 
     total_gas_purchases = total_gas_purchases + gallons_purchased * price; 
     cout << " total gas cost : " << total_gas_purchases << endl; 
     gas_in_tank = USABLE_GAS; 
     } 
    } 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

double gasPrice(int day, int YEAR_NUM) { 
if (int day=365) { //call YEAR_NUM, for day=365, increase YEAR_NUM by 1 
    YEAR_NUM++; 
    day = 0; 
} 
if (YEAR_NUM >= 4) { 
    double currentPrice = FINAL_PRICE; 
    currentPrice; 

} 
if (YEAR_NUM < 4) { //conditional price for the first four years 
    double dailyIncrease = (FINAL_PRICE - INITIAL_PRICE)/(NUM_YEARS * 365); 
    double currentPrice = (INITIAL_PRICE + day * dailyIncrease); 
    return currentPrice; 
} 
} 
+6

Не так много смысла в том, что цикл while, который запускается один раз, а затем возвращается. Сделайте это 'if'. Во всяком случае, вы ничего не возвращаете, если 'YEAR_NUM == 4'. – chris

ответ

2

Вы должны вернуть что-то в gasPrice, которая находится вне контура for. Компилятор говорит, что существует вероятность того, что ни один из условий while не будет удовлетворен, и в этом случае нет значения для возврата.

С другой стороны, петли while не имеют большого смысла так, как они написаны. Просто сделайте их if заявлений.

+0

Не могли бы вы проверить мою отредактированную версию кода? Я заменил циклы for for на «if» и сделал все возможное, чтобы функция имела смысл для меня. Он все еще утверждает, что он может достигнуть конца непустой функции, хотя ... – Ephexx

+0

'double gasPrice (int day, int YEAR_NUM) { if (int day = 365) { // звонок YEAR_NUM, для день = 365, увеличение YEAR_NUM на 1 YEAR_NUM ++; день = 0; } if (YEAR_NUM> = 4) { double currentPrice = FINAL_PRICE; currentPrice; } if (YEAR_NUM <4) {// условная цена за первые четыре года double dailyIncrease = (FINAL_PRICE - INITIAL_PRICE)/(NUM_YEARS * 365); double currentPrice = (INITIAL_PRICE + день * dailyIncrease); return currentPrice; } return 1.00; // заменить разумное значение по умолчанию } ' То, что я добавил был' вернуть 1.00, 'заменить, что с разумной стоимостью по умолчанию – edtheprogrammerguy

+0

Таким образом, это работает .. и вместо вашего 1,00, я сказал,' Возвращение YEAR_NUM' Теперь единственное, чего он не делает, - это сделать последние четыре года «FINAL_PRICE» как статическое задание. Я чувствую, что мне нужно добавить инструкцию, которая увеличивает значение 'YEAR_NUM', когда' day = 365', но я не знаю, где его поместить в код. Я пробовал несколько мест. – Ephexx

0

Функция gasPrice не имеет оператора возврата вне цикла for. Поскольку функция имеет тип возврата, который не является void, тогда, если оператор return отсутствует, поведение функции будет неопределенным.

1

Я думаю, что если вы переместите "return currentPrice;" из этих двух циклов, это устранит проблему.

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