如何结束while循环
How do you end while loop
当输入"NOMORE"这个词时,我很难弄清楚如何结束我的程序。
我研究了类似的线程,建议使用"if, break"或"if, go to"。
虽然程序将在进入"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;
}
我认为,在询问是否"可能结束"时,您指的是终止循环,而不是程序。
如果你不能改变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
,并且不管vehicleSpeed
和zoneSpeed
如何处理。一个优点是,如果满足结束条件,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票证函数,因为在您的代码中没有不使用CAL票证的条件。在这段代码中你检查NOMORE条件如果它存在你就不会调用这些函数
如果由于某种原因不能使用break
,则可以将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
声明?例如,你是否全部用大写字母输入"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);
}
}
那么,为什么不使用异常呢?
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;
}
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 在 while 循环中使用 pow() 函数 C++
- C++ 制作/命名不初始化的向量(在 while 循环中)
- std::getline没有在while循环中重新请求用户输入