【发布时间】:2015-11-24 03:08:51
【问题描述】:
我正在创建一个汽车模拟器程序,运行它时出现无限循环。我加了一个休息;在while循环结束时,但它只显示里程:1 - 燃料水平:15。我还注意到在无限循环中,燃料水平没有改变它只是保持在15。我查看了我的代码并试图调试它,但我似乎找不到它。任何帮助是极大的赞赏。谢谢你
更新:它现在运行良好。燃油油位从 15 开始下降,但里程从 1 开始增加到 15,这是不正确的,有什么想法吗?
里程表可以存储的最大里程为 999,999 英里。当超过此数量时,里程表会将当前里程重置为 0。
每行驶 **24 英里,它应该将 FuelGauge 对象的当前燃料量减少 1 加仑。 (该车的燃油经济性为每加仑 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
【问题讨论】:
-
您可以使用调试器单步执行以查看卡住的位置。另外,请尝试发布一个 minimal 示例。
-
您的工作流程中是否有任何减少
FuelGauge::currentAmtFuel的内容?我看不到任何执行此操作的代码。因此,currentAmtFuel永远不会达到 0,并导致无限循环。 -
你永远不会调用
decrementFuelTank(),所以它永远不会为0。
标签: c++ class infinite-loop