c++ - 你如何结束 while 循环

标签 c++

我很难弄清楚如何在输入“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,并且它适本地处理 vehicleSpeedzoneSpeed 无关。一个优点是,如果满足结束条件,getInfo() 实际上不需要读取这些值。显然 getInfo() 中会有一个测试,但调用者不需要关心它是如何完成的。

关于c++ - 你如何结束 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40210762/

相关文章:

c++ - glibc 检测到双重释放或损坏

c++ - 为什么当我们将 lambda 发送到 std::function 时,自动模板类型推导不起作用?

c++ - 了解 Mat 元素 Opencv 的值

c++ - 测试 shared_ptr 是否为 NULL

c++ - Unix/Linux Socket 编程的好读物?

c++ - 大数输出

c++ - 如何在 C++ 中将值数组转换为参数

c++ - 二进制文件如何在C编程中可移植?

c++ - 需要引用时传递指针

c++ - 如何从一个类中的命名空间初始化所有变量