你怎么在循环结束时结束

时间:2016-10-24 04:36:48

标签: c++

我很难找到如何在“#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;
}

5 个答案:

答案 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",并且无论如何都会vehicleSpeedzoneSpeed正确处理。一个优点是,如果满足结束条件,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,您可以将printInfoif包含在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;
}