Я создаю программу симулятора автомобиля, и я получаю бесконечный цикл, когда я запускаю его. Я добавил перерыв; в конце цикла while, но затем он просто отображает пробег: 1 - Уровень топлива: 15. Я также заметил, что в бесконечном цикле уровень топлива не меняется, он просто остается на 15. Я просмотрел свой код и попытались отладить его, но я не могу найти его. Любая помощь приветствуется. СпасибоСимулятор автомобиля - Бесконечная петля
UPDATE: теперь он работает хорошо. Уровень топлива снижается с 15, но пробег начинается с 1 и увеличивается до 15, что неверно, любые идеи почему?
Максимальный пробег, который может хранить одометр, составляет 999,999 миль. Когда эта сумма будет превышена, одометр сбрасывает текущий пробег на 0.
Он должен уменьшить текущее количество топлива FuelGauge на 1 галлон за каждые ** 24 миль, пройденных. (Экономия топлива автомобиля составляет 24 мили на галлон.)
Имитировать заполнение автомобиля топливом, а затем запустить петлю, которая увеличивает одометр, пока автомобиль не закончит топливо. Во время каждой итерации цикла напечатайте текущий пробег автомобиля и количество топлива.
//While loop and display
while (fuelG.getCurrentAmtFuel() > 0)
{
odm.incrementCurrentMileage();
cout << "Mileage: " << odm.getCurrentAmtMiles() << endl;
cout << "Fuel Level: " << fuelG.getCurrentAmtFuel() << " gallons" << endl;
break;
}
В то время как цикл теперь:
while (fuelG.getCurrentAmtFuel() > 0)
{
odm.incrementCurrentMileage();
cout << "Mileage: " << odm.getCurrentAmtMiles() << endl;
cout << "Fuel Level: " << fuelG.getCurrentAmtFuel() << " gallons" << endl;
fuelG.decrementFuelTank();
}
//FuelGauge.h
#ifndef FUELGAUGE_H
#define FUELGAUGE_H
using namespace std;
class FuelGauge
{
private:
int currentAmtFuel; //Holds current amount of fuel
public:
FuelGauge (int gallons) // Current amount of fuel in gallons
{
currentAmtFuel = gallons;
}
FuelGauge(); //Constructor
int getCurrentAmtFuel() //Gets the current amount of fuel and returns it
{
return currentAmtFuel;
}
void incrementFuelTank() //Increments the fuel tank
{
if (currentAmtFuel < 15)
{
currentAmtFuel++;
}
}
void decrementFuelTank() //Decrements the fuel tank
{
if (currentAmtFuel > 0)
{
currentAmtFuel--;
}
}
};
#endif
//Odometer.h
#include "FuelGauge.h"
#ifndef ODOMETER_H
#define ODOMETER_H
class Odometer
{
private:
int currentAmtMiles; //Holds current amount of miles
FuelGauge *fuelG; //Creates fuelG under FuelGauge
//FuelGauge *f;
public:
Odometer(int miles, FuelGauge *f) //odometer function
{
currentAmtMiles = miles;
fuelG = f;
}
int getCurrentAmtMiles() //Function to get the amount of miles
{
return currentAmtMiles;
}
void incrementCurrentMileage() //Increment mileage function
{
if(currentAmtMiles < 999999)
{
currentAmtMiles++;
}
else
currentAmtMiles = 0;
}
};
#endif
Вы можете пройти через отладчик, чтобы увидеть, где он застрял. Кроме того, пожалуйста, попробуйте указать * минимальный * пример. – tadman
Есть ли что-нибудь, что уменьшает «FuelGauge :: currentAmtFuel», который используется в вашем рабочем процессе? Я не вижу никакого кода, который это делает. Таким образом, 'currentAmtFuel' никогда не достигает 0 и приводит к бесконечному циклу. –
Вы никогда не называете 'decmentFuelTank()', поэтому он никогда не доходит до 0. – adamdc78