2

我正在尝试用 C++ 构建一个简单的骰子游戏。我不明白为什么它没有脱离 while 循环。

您应该只能下注 100、300 或 500 欧元。

即使我输入我的赌注“100-300-500”,这应该是正确的。它仍然循环并说这是一个无效的赌注。为什么当我有它时它没有进展到 if 语句if ((bet1 == 100) || (bet1 ==300) || (bet1==500))

我尝试将 if 语句放在 while 循环和各种事情之前。我无法让它工作。

cout << "Please place a bet. 100, 300, 500kr" << endl;
cin >> bet1;

while ((bet1 <= 99) || (bet1 >= 101) || (bet1 <= 299) || (bet1 >= 301) || (bet1 <= 499) || (bet1 >= 501)) {
    cout << "Please place a valid bet" << endl;
    cin >> bet1;
}
if ((bet1 == 100) || (bet1 ==300) || (bet1==500)) {
    cout << "You have deposited " << " " << bet1 << "" << "And you now have: "<< saldo - bet1 << " " << "Remaining on your account." << endl;
}
4

5 回答 5

2

这个循环

while ((bet1 <= 99) || (bet1 >= 101) || (bet1 <= 299) || (bet1 >= 301) || (bet1 <= 499) || (bet1 >= 501)) {
    cout << "Please place a valid bet" << endl;
    cin >> bet1;
}

是任何有效输入值 100、300 或 500 的无限循环。

例如,如果用户将进入100,那么至少这个条件(bet1 <= 299)评估为真。如果用户将进入300,那么至少这个条件(bet1 >= 101)评估为真。如果用户将进入500,那么至少该条件再次(bet1 >= 101)评估为真。

您应该重写 while 循环,例如

while ( bet1 != 100 && bet1 != 300 && bet1 != 500 )  {
    cout << "Please place a valid bet" << endl;
    cin >> bet1;
}

使用您编写循环的方法,条件可能看起来像

while ( ( bet1 <= 99 ) || ( bet1 >= 101 && bet1 <= 299 ) || (bet1 >= 301 && bet1 <= 499 ) || ( bet1 >= 501 ) ) {
    cout << "Please place a valid bet" << endl;
    cin >> bet1;
}
于 2021-11-11T13:45:49.577 回答
2

任何有限整数值都是>=101<=299。Oring 更多条件不会改变条件总是true

如果你想循环直到bet1100,300或者500

while ( bet1 != 100 && bet1 != 300 && bet1 != 500) {...
于 2021-11-11T13:43:18.153 回答
1

只是这将永远是正确的:(bet1 >= 101)|| (bet1 <= 299)

数轴上的所有数字都是 >= 101 或 <= 299

您需要使用逻辑与 (&&) 运算符,例如 ((bet1 >= 101) && (bet1 <= 299)) || ((bet1 >= 301) && (bet1 <= 499))

于 2021-11-11T13:52:30.243 回答
1

想象一下:有人输入 100。现在 while 循环检查:<=99?不。>>或者<<也许>=101?不。>>或<< <=299?这是!因此,条件为真,它要求一个有效的赌注。

看看如何从这里解决问题。

于 2021-11-11T13:44:24.517 回答
1

您在while循环中的条件始终是true. 您可以通过以下方式检查有效号码:

while (bet1 != 100 && bet1 != 300 && bet1 != 500)
{
    cout << "Please place a valid bet" << endl;
    cin >> bet1;
}
于 2021-11-11T13:44:42.280 回答