使用 while(1) 但不能打破 c++ 中的循环

Posted

技术标签:

【中文标题】使用 while(1) 但不能打破 c++ 中的循环【英文标题】:using while(1) but can't break the loop in c++ 【发布时间】:2017-07-06 05:22:20 【问题描述】:

我正在尝试在getCommand 函数中使用while(1) 循环,但它会无限运行并且不会中断。我已经包含了HELP 函数,因为它在getCommand 函数中被调用。这是有问题的代码:

void HELP(string inCommand) 
    if (inCommand == "invLoad?")
        cout << "This command allows the user to load in new inventory information into the report." << endl;
    else if (inCommand == "invReport?")
        cout << "This command allows the user to access an inventory report of a requested item." << endl;
    else if (inCommand == "invPriceUpdate?")
        cout << "This command allows the user to update the prices of a requested item." << endl;


//This is the function that acquires the SIMS command from the user 
string getCommand()

    string commandInput = "";
    char quit = '.'; 
    cout << "Please enter the command for the Simple Inventory Management System:" << endl <<
    "invLoad, invReport, invPriceUpdate." << endl << endl;
    cout << "To learn what each command does add a '?' at the end of the command input" << endl;
    cin >> commandInput;

    while (1) 
        if (commandInput == "invLoad") 
            return "invLoad";
        
        else if (commandInput == "invReport") 
            return "invReport";
        
        else if (commandInput == "invPriceUpdate") 
            return "invPriceUPdate";
        
        else if (commandInput == "invLoad?")
            HELP(commandInput);
        else if (commandInput == "invPriceUpdate?")
            HELP(commandInput);
        else if (commandInput == "invReport?")
            HELP(commandInput);
        else
            cout << "Please enter an appropriate command!" << endl;
        switch (quit)
        
            case 'y':
                return 0;
                break;

            case 'n':
                cout << "Enter another command" << endl;
        
    

不幸的是,while 循环无限运行,我不知道如何打破它。

【问题讨论】:

会无限运行,查看***.com/questions/24278724/… 您可以使用调试器来了解发生了什么。 尝试将 cin 指令放入循环中,让用户有机会在每个循环中更新 commandInput 值。 当然是无限运行。循环的内容不断检查相同的变量,希望它们的值会以某种方式神奇地自行改变。当然,C++ 不是这样工作的。 while 循环内没有任何东西会改变变量中的值;因此,循环的每次迭代总是会得出相同的结果。 commandInput == "invReport" 这不是你比较两个字符串的方式。 【参考方案1】:

开关循环:不应该这样写。

输入“commandInput”是应该循环的

正确的说法是:switch(commandInput)

你已经给变量退出了一个值“。”这将导致编译器不进入循环,因为条件永远不会满足,因为您总是要求 commandInput 变量作为输入 因此,当您调试代码时,您实际上会发现没有进入循环,这就是为什么您的循环仍然是无限的

【讨论】:

以上是关于使用 while(1) 但不能打破 c++ 中的循环的主要内容,如果未能解决你的问题,请参考以下文章

17 C#中的循环执行 while循环

Python打破嵌套的for循环并重新启动while循环

打破一个while循环并重新启动代码

如何在python的内部for循环中打破while循环?

在 PHP 中打破多个函数(短路)

小猪的数据结构辅助教程——2.4 线性表中的循环链表