【问题标题】:Making a random number rarity system and it's not working [duplicate]制作随机数稀有系统但它不起作用[重复]
【发布时间】:2023-03-09 12:41:02
【问题描述】:

可能重复:
How do I select a range of values in a switch statement?
c++ cannot appear in a constant-expression|

我要做的是生成一个随机数,并根据数字的值写出“常见”、“稀有”或“非常稀有”。有人可以帮帮我吗?

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int a;
    srand(time(0));
    a = 1 + (rand()%10);

    switch (a)
    {
        case (a >= 0 && a <= 5):
        cout << "Common";
            break;

        case (a >= 6 && a <= 8):
        cout << "Rare";
            break;

        case (a >= 9 && a <= 10):
        cout << "Very rare";
            break;

        default:
            break;
    }

    return 0;
}

【问题讨论】:

  • 什么不起作用?你得到编译错误吗?分段错误?你每次都得到相同的值吗?什么?
  • -1,这个问题的标题没有描述实际的问题,完全没有提到编译器错误。
  • case (a &gt;= 0 &amp;&amp; a &lt;= 5): -> a 怎么可能是 0?

标签: c++


【解决方案1】:

您不能在 switch case 中使用比较运算符。试试这个:

 switch (a)
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
        cout << "Common";
            break;

        case 6:
        case 7:
        case 8:
        cout << "Rare";
            break;

        case 9:
        case 10:
        cout << "Very rare";
            break;

        default:
            break;
    }

【讨论】:

  • 另外,switch 语句以分号结尾。
  • 嗯,我是 Java 人,所以我会相信,但我不这么认为。
  • a = 1 + (rand()%10);所以它会加 1,使可能的范围为 1-10。是的,我认为这是错误的。非常感谢,我不知道这样可以使多个案例具有相同的输出。再次感谢! :D
  • @Josué Molina:不一定。在 C++ 中,类需要分号,switch 语句不需要。
  • 另外,最初的问题可能与链式 else-if 一起出现。
【解决方案2】:

如果你想检查范围,我建议你使用 if 语句来避免使用所有可能值的列表:

if (a >= 0 && a <= 5)
    cout << "Common";
else if (a >= 6 && a <= 8)
    cout << "Rare";
else if (a >= 9 && a <= 10)
    cout << "Very rare";

【讨论】:

  • 啊,是的,那也行,谢谢!
猜你喜欢
  • 2011-07-28
  • 2013-02-02
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多