虽然循环不检查或条件

While loop not checking or condition

本文关键字:条件 不检查 循环      更新时间:2023-10-16

我正在做 c++ 练习。我面临的一个问题如下...

编写一个程序,继续要求用户输入 5

以外的任何数字,直到用户输入数字 5。然后告诉用户"嘿!你不应该输入5!"然后退出程序。

★ 修改程序,以便在 10 次迭代后,如果用户仍未输入 5,将告诉用户"哇,你比我更有耐心,你赢了"并退出。

#include <iostream>
using namespace std;
int main()
{
    int userNum;
    int numTimes = 0;
    do
    {
        cout << "Please enter a number: ";
        cin >> userNum;
        numTimes++;
    }while ((numTimes != 10) || (userNum != 5));
    {
        if (numTimes == 10)
        {
            cout << "Wow, you're more patient than I am, you win.n";
        }
        else
        {
            cout << "Hey! you weren't supposed to enter 5!n";
        }
    }
}

我似乎无法让 while 循环的 or 条件正常工作。

你以一种

令人困惑的方式这样做,我的目标是表现力:

#include <iostream>
int main() {
    int userNum;
    int numTimes = 0;
    while (true) {
        std::cout << "Please enter a number: ";
        std::cin >> userNum;
        if (userNum == 5) {
            std::cout << "Hey! you weren't supposed to enter 5!n";
            break;
        }
        ++numTimes;
        if (numTimes == 10) {
            std::cout << "Wow, you're more patient than I am, you win.n";
            break;
        }
    }
}

break允许您方便地退出循环。不过,请不要"滥用"这一点来使事情过于复杂或完成奇怪的技巧。没有人喜欢意大利面条代码。

请注意您不应该use namespace std; .还要尝试在var++上使用++var var++因为会不必要地复制对象。


Please enter a number: 5
Hey! you weren't supposed to enter 5!

Please enter a number: 12
Please enter a number: 45
Please enter a number: 12
Please enter a number: 0
Please enter a number: 9
Please enter a number: 1
Please enter a number: 2
Please enter a number: 3
Please enter a number: 4
Please enter a number: 1
Wow, you're more patient than I am, you win.

在这里更改它

while ((numTimes != 10) || (userNum != 5));

对此

while ((numTimes != 10) && (userNum != 5));

因为您希望它一旦一个条件变false就停止。你现在用||的方式,它只有在两个条件同时为真时才停止,所以如果第 10 个数字是5.如果只输入一个5,或者刚刚达到 10,它不会停止。如果在 10 个数字之后输入5,它甚至不会停止。

请记住,即使只有ab中的一个是真的,a || b也是true。但是既然条件这样令人困惑,为什么不这样拆分逻辑呢?

int main()
{
    int userNum;
    for (int numTimes = 0; numTimes < 10; numTimes++){
        std::cout << "Please enter a number: ";
        std::cin >> userNum;
        if (userNum == 5) {
            std::cout << "Hey! you weren't supposed to enter 5!n";
            return 0;
        }
    }
    std::cout << "Wow, you're more patient than I am, you win.n";
}

问题出在您的状况上。您的循环将继续,直到不再满足条件。

while ((numTimes != 10) || (userNum != 5));

强制循环继续,直到两个条件都为 false。如果你的 numTimes == 10,那么 userNum 仍将<5

while ((numTimes < 10) and (userNum != 5));

是正确的条件