Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环时如何结束_C++ - Fatal编程技术网

C++ 循环时如何结束

C++ 循环时如何结束,c++,C++,输入“NOMORE”一词后,我很难想出如何结束我的程序。 我研究过类似的线程,建议使用“如果,中断”或“如果,转到”。 虽然程序将在输入“NOMORE”后结束,但我想知道是否可以在不处理剩余模块(calcTicket、printInfo)的情况下结束 那么,为什么不使用异常呢 void getInfo(licensePlate, vehicleSpeed, zoneSpeed) { licensePlate = /*get logic*/; if (licensePlate =

输入“NOMORE”一词后,我很难想出如何结束我的程序。
我研究过类似的线程,建议使用“如果,中断”或“如果,转到”。

虽然程序将在输入“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) 用户输入操作不做任何更改