我很难找到如何在“#34; NOMORE"输入。
我研究了类似的线程,建议使用" if,break"或者"如果,转到"。
虽然程序将在输入" NOMORE"后结束,但我想知道是否可以在不处理剩余模块的情况下结束(calcTicket,printInfo)。
int main ()
{
string licensePlate;
double vehicleSpeed = 0, zoneSpeed = 0, ticketPrice, base = 0, fee = 0;
while (licensePlate !="NOMORE")
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
if (licensePlate == "NOMORE")
break;
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
return 0;
}
答案 0 :(得分:4)
我假设,在询问它是否“可能结束”时,你指的是终止循环,而不是程序。
如果您无法更改getInfo()
,我的结构为do-while
而不是while
。
do
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
if (licensePlate == "NOMORE") break;
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
} while (true);
前提是getInfo()
需要被调用至少一次,如果输入"NOMORE"
则不需要后续处理,否则循环将永远继续。
如果您可以更改getInfo()
以返回bool
,则可以执行...
while (getInfo(licensePlate, vehicleSpeed, zoneSpeed))
{
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
这假设getInfo()
如果看到false
则返回"NOMORE"
,并且无论如何都会vehicleSpeed
和zoneSpeed
正确处理。一个优点是,如果满足结束条件,getInfo()
实际上不需要读取这些值。显然在getInfo()
内会有一个测试,但调用者不需要关心如何完成测试。
答案 1 :(得分:1)
如果我正确理解了这个问题,请尝试以下方法:
int main ()
{
string licensePlate;
double vehicleSpeed = 0, zoneSpeed = 0, ticketPrice, base = 0, fee = 0;
while (licensePlate !="NOMORE")
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
if (licensePlate != "NOMORE")
{
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
}
return 0;
}
您将始终转到cal ticket函数,因为没有条件不在您的代码中。在这段代码中你检查NOMORE条件,如果它在那里你不会调用那些函数
答案 2 :(得分:0)
如果由于某种原因无法使用calcTicket
,您可以将printInfo
和if
包含在if(licensePlate != "NOMORE")
语句中,如break
。
如果你能够使用while (true)
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
if (licensePlate == "NOMORE")
break;
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
,我会做(只进行一次比较)
if
也许问题出在您的输入上,而您根本没有输入{{1}}声明?你正在进入" NOMORE"例如,所有上限?
答案 3 :(得分:0)
另一种解决方案是使用在用户想要退出时设置的标志,并在循环条件中使用该标志:
bool userWantsToQuit = false;
while (!userWantsToQuit)
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
userWantsToQuit = (licensePlate == "NOMORE");
if (!userWantsToQuit)
{
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
}
答案 4 :(得分:-1)
那么,为什么你不使用例外?
void getInfo(licensePlate, vehicleSpeed, zoneSpeed)
{
licensePlate = /*get logic*/;
if (licensePlate == "NOMORE")
throw std::invalid_argument("NO MORE");
}
/*..define other functions..*/
int main ()
{
string licensePlate;
double vehicleSpeed = 0, zoneSpeed = 0, ticketPrice, base = 0, fee = 0;
while(true)
{
try
{
getInfo(licensePlate, vehicleSpeed, zoneSpeed);
calcTicket(vehicleSpeed, zoneSpeed, ticketPrice, base, fee);
printInfo(licensePlate, vehicleSpeed, zoneSpeed, ticketPrice);
}
catch(...)
{
/*exit logic*/
}
}
return 0;
}