C++ 循环时如何结束
输入“NOMORE”一词后,我很难想出如何结束我的程序。C++ 循环时如何结束,c++,C++,输入“NOMORE”一词后,我很难想出如何结束我的程序。 我研究过类似的线程,建议使用“如果,中断”或“如果,转到”。 虽然程序将在输入“NOMORE”后结束,但我想知道是否可以在不处理剩余模块(calcTicket、printInfo)的情况下结束 那么,为什么不使用异常呢 void getInfo(licensePlate, vehicleSpeed, zoneSpeed) { licensePlate = /*get logic*/; if (licensePlate =
我研究过类似的线程,建议使用“如果,中断”或“如果,转到”。 虽然程序将在输入“NOMORE”后结束,但我想知道是否可以在不处理剩余模块(calcTicket、printInfo)的情况下结束
那么,为什么不使用异常呢
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;
}
那么,为什么不使用异常呢
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;
}
我假设,在询问是否“可能结束”时,您指的是终止循环,而不是程序 如果您无法更改
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()
如果看到的“NOMORE”
,则返回false
,并且它可以适当地处理车辆速度和区域速度。一个优点是,如果满足结束条件,getInfo()
实际上不需要读取这些值。显然,在getInfo()
中会有一个测试,但是调用方不必关心如何完成。我假设,在询问是否“可能结束”时,您指的是终止循环,而不是程序
如果您无法更改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()
如果看到的“NOMORE”
,则返回false
,并且它可以适当地处理车辆速度和区域速度。一个优点是,如果满足结束条件,getInfo()
实际上不需要读取这些值。显然,在getInfo()
中会有一个测试,但是调用者不必关心测试是如何完成的。如果我正确理解了问题,请尝试以下方法:
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票证功能,因为您的代码中没有不转到该功能的条件。在这段代码中,您检查NOMORE条件,如果它存在,您将不会调用这些函数如果我正确理解了问题,请尝试以下操作:
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票证功能,因为您的代码中没有不转到该功能的条件。在这段代码中,您可以检查NOMORE条件,如果它存在,您就不会调用这些函数如果由于某种原因无法使用break
,您可以将calcTicket
和printInfo
包装在if
语句中,如if(licensePlate!=“NOMORE”)
如果您能够使用break
,我会这样做(只进行一次比较)
也许问题在于您的输入,而您根本没有输入if
语句?例如,您是否在所有大写字母中输入“NOMORE”?如果由于某种原因无法使用break
,您可以将calcTicket
和printInfo
包装在If
语句中,如If(licensePlate!=“NOMORE”)
如果您能够使用break
,我会这样做(只进行一次比较)
也许问题在于您的输入,而您根本没有输入if
语句?例如,您是否在所有CAP中输入“NOMORE”?另一种解决方案是使用一个在用户想要退出时设置的标志,并在循环条件中使用该标志:
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);
}
}
另一种解决方案是使用在用户想要退出时设置的标志,并在循环条件中使用该标志:
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);
}
}
目前还没有?你想在“nomore”时停止整个程序吗?您好,程序将结束,但只有在用calcTicket和printInfo模块提示用户之后。我希望它立即结束,并且只提示“按任意键继续…”当while循环已经阻止计算这些语句时,需要什么if来检查“nomore”。。。。。if(licensePlate==“NOMORE”)中断代码>将永远不会执行!如果licensePlate=“NOMORE”
实际上,我已经删除了上面代码中的if语句;但是,即使用户输入“NOMORE”,程序也只有在使用calcTicket和printInfo模块提示用户后才会结束。目前没有。是否要在其“NOMORE”时停止整个程序?您好,程序将结束,但只有在使用calcTicket和printInfo模块提示用户后才会结束。我希望它立即结束,并且只提示“按任意键继续…”当while循环已经阻止计算这些语句时,需要什么if来检查“nomore”。。。。。if(licensePlate==“NOMORE”)中断代码>将永远不会执行!如果licensePlate=“NOMORE”
实际上,我已经删除了上面代码中的if语句;但是,即使用户输入“NOMORE”,程序也只有在使用calcTicket和printInfo模块提示用户后才会结束。例外情况并不适用于此——“NOMORE”只是输入的结束,而不是错误,并且有更简单(更有效)的方法终止循环。@Wyzard,我同意-‘NOMORE’不是错误,使用异常并不是打破循环的最有效方法,但是:1)代码看起来更清晰2)如果…转到或…中断,我们不会重复无用的内容。3) 用户输入操作不做任何更改