While循环创建无限循环

时间:2020-11-08 01:39:25

标签: c++ while-loop infinite-loop

因此,我正在为C ++类创建程序,并且创建了while循环来停止无效输入。 每次我使用无效输入进行测试时,都会进入无限循环。我是编码的新手,所以我真的不知道如何解决它。

 cout << "Enter weight in ounces (Max: 1800)" << endl;
    cin >> pkgweight;

    while (pkgweight > 0 || pkgweight < 1800)
    {
        cout << "Weight out of range. Program terminating.\n" << endl;
    }

    cout << "Enter miles shipping (Max: 3500)" << endl;
    cin >> distance;

    while (distance > 0 || distance < 3500)
    {
        cout << "Shipping distance out of range." << endl;
        cout << "Program terminating.\n" << endl;
    }

3 个答案:

答案 0 :(得分:2)

如果该循环内没有任何变化,则退出条件将永远不会触发。

也许你是说:

int pkgweight = 0;

cout << "Enter weight in ounces (Max: 1800)" << endl;
cin >> pkgweight;

if (pkgweight < 0 || pkgweight > 1800)
{
  cout << "Weight out of range. Program terminating.\n" << endl;
}

在需要循环直到满足某些条件的情况下,您需要使用whileif就像是非循环的while

虽然学习非常好,而且可以理解自己会犯错误,但滑倒一些基本知识通常是您没有很好的工作依据的迹象。让自己扎实C++ reference book,如果您对某些事情感到困惑,请经常参考。这是正确学习的必不可少的,而不仅仅是在这里和那里捡拾点点滴滴,并试图弥补差距。 C ++的许多部分毫无意义,它们是数十年前设计决策的产物,也是您从未听说过的其他编程语言的影响。您需要适当的基础。

答案 1 :(得分:1)

如果您希望用户能够修正输入错误的输入,则需要:

 cout << "Enter weight in ounces (Max: 1800)" << endl;
 cin >> pkgweight;

 while (pkgweight > 0 || pkgweight < 1800)
 {
     cout << "Weight out of range. Program terminating.\n" << endl;
     cout << "Enter weight in ounces (Max: 1800)" << endl;
     cin >> pkgweight;
 }

这样,如果用户输入的数字超出有效范围,则会提示他们输入新的数字。如果新值在该范围内,则循环将退出。

您当前程序的问题是,while循环将在“条件”为“ true”的情况下执行。在当前程序中,一旦设置了pkgweight,它就保持不变。这意味着,如果由于要检查的条件是true而进入循环,则该条件将永远不会改变(允许循环退出),并且错误消息将被无限期打印。

答案 2 :(得分:0)

查看您的代码,好像您想在输入错误的情况下终止程序。您可以考虑终止该功能。全部在main()中吗?如果它不在外部函数中,则只需执行return -1。我知道这可能是不好的编程习惯,但是,嘿,它专门为此工作!
顺便说一句,您的条件语句为> 0< 1800,这意味着如果 变量distance和pkgweight在指定范围内,则程序将终止。
这是我的工作片段,没有这些错误,已在onlineGDB上进行了测试。

 #include <iostream>
 using namespace std;
 int main ()
 {
    int pkgweight, distance;
    cout << "Enter weight in ounces (Max: 1800)" << endl;
    cin >> pkgweight;

    while (pkgweight < 0 || pkgweight > 1800)
    {
        cout << "Weight out of range. Program terminating.\n" << endl;
        return -1;
    }

    cout << "Enter miles shipping (Max: 3500)" << endl;
    cin >> distance;

    while (distance < 0 || distance > 3500)
    {
        cout << "Shipping distance out of range." << endl;
        cout << "Program terminating.\n" << endl;
        return -1;
    }
    return 0;
}

当然,除了切换小于和大于以外,您始终可以将条件包装在not运算符中。