而循环创建无限循环



所以我正在为一个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;
}

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

也许你的意思是:

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;
}

您需要将while用于要循环直到满足某些条件的情况。if就像一个非循环while

虽然你正在学习并且知道你会犯错误是件好事,但在这种基本的东西上失误通常表明你没有很好的参考资料。给自己一本扎实的C++参考书,如果你对某事感到困惑,经常参考它。这对于正确学习至关重要,而不仅仅是在这里和那里捡起零碎的东西并试图凭直觉找出差距。C++的许多部分都没有意义,它们是几十年前设计决策的产物,也是你从未听说过的其他编程语言的影响。你需要一个适当的基础。

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

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,则该条件将永远不会改变(允许循环退出),并且您的错误消息将无限期地打印。

查看您的代码,如果输入错误,您似乎想杀死程序。您可以考虑终止该函数。这一切都在main()吗?如果它不在外部函数中,只需执行return -1。我知道这可能是糟糕的编程实践,但是嘿,它专门用于此!
顺便说一下,你的条件说> 0< 1800,这意味着如果变量距离和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 运算符中。

最新更新