【问题标题】:Random Number Gen as function作为函数的随机数生成
【发布时间】:2014-10-31 00:56:57
【问题描述】:

这个程序的目标是有一个随机数生成器,我可以通过一个函数在主程序中使用它。然后来自随机数生成器的值将触发一个动作。这有 if 语句检查来自生成器的值。我遇到的问题是两个字符串,“数字 1 - 5”和“数字 6 - 10”出现,而不是 if 语句仅触发它们所期望的内容,这只会使其中一个字符串出现。

#include <iostream>
#include <string>
#include <chrono>

void main()
{
    void RanNum1to10();
    int RanNum;
    int x;
    std::cin >> x;
    if (x == 2)
    {
        std::cout << "X = 2" << std::endl << std::endl;
        RanNum1to10();
        if (RanNum = 1||2||3||4||5)
        {
            std::cout << "Number 1 - 5" << std::endl;
        }
        if (RanNum = 6||7||8||9||10)
        {
            std::cout << "Number 6 - 10" << std::endl;
        }
    }
system("pause");
}

void RanNum1to10()
{
    (time(0));
    int RanNum;
    int x = 1+(rand() % 9 + 1);
    switch(x)
    {
        case 1:
            RanNum = 1;
        case 2:
            RanNum = 2;
        case 3:
            RanNum = 3;
        case 4:
            RanNum = 4;
        case 5:
            RanNum = 5;
        case 6:
            RanNum = 6;
        case 7:
            RanNum = 7;
        case 8:
            RanNum = 8;
        case 9:
            RanNum = 9;
        default:
            RanNum = 10;
    }
}

谢谢。

【问题讨论】:

  • 您真的需要获得good book 并再次学习基础知识。
  • 在回答后不要编辑问题以使代码正确。这会让以后的读者感到困惑

标签: c++ function random


【解决方案1】:

你需要使用

    if ( (RanNum == 1) ||
         (RanNum == 2) ||
         (RanNum == 3) ||
         (RanNum == 4) ||
         (RanNum == 5) )

而不是

    if (RanNum = 1||2||3||4||5)

对于另一个 if 语句也是如此。

这是一个问题。

另一个问题是你有这条线:

int RanNum;

main,但您尚未为其分配任何值。

您已为RanNum1to10 中的同名局部变量赋值,但这不会更改mainRanNum 的值。

您可以通过将RanNum1to10 的返回值更改为int 并从中返回随机数并将RanNum1to10 的返回值分配给RanNum 来解决该问题。

换行

void RanNum1to10();

int RanNum1to10();

换行

    RanNum1to10();

    RanNum = RanNum1to10();

RanNum1to10的实现改为:

int RanNum1to10()
{
   return (rand() % 10 + 1);
}

更新,以回应 OP 的评论

由于运算符优先级,表达式if (x = 2||3||4) 等价于if ( x = (2 || 3 || 4) ),即等价于x = 1; if ( x )。如您所见,这种if 语句的条件总是计算为真。

【讨论】:

  • @Laina 这正是表达式在 C 和 C++ 中的工作方式。如果您查看operator precedence,您将看到您的表达式等同于x = (2||3||4),而2||3||4 的计算结果为1x = 1 的结果是 1true
  • 重新更新:= 的优先级低于 ||,而 == 的优先级更高。您的陈述几乎正确。
  • @MarkRansom,感谢您指出错误。现在已经修好了。
  • 不管运算符的优先级如何,RanNum = (1||2||3||4||5)(RanNum = 1)||2||3||4||5 仍然始终为真,因为 1、2、3、4 或 5 都是“真”表达式并且它们的算术或也为真
【解决方案2】:

第一个问题:if (x = 2) 应该是if (x == 2)。否则,您只是在测试分配的结果,它等于分配的数字。编译器应该为此生成警告。

第二个问题:要针对多个值进行测试,您不能只将or 的值与|| 一起使用。这样一个表达式的结果将是真或假,等于 1 或 0。您需要展开每个比较:

if (RanNum == 1 || RanNum == 2 || RanNum == 3 || RanNum == 4 || RanNum == 5)

当然,在这种特殊情况下,您可以简化条件:

if (RanNum >= 1 && RanNum <= 5)

【讨论】:

  • 这就是为什么!想知道为什么 if 语句不能是 if (RanNum = 1||2)。谢谢,很有帮助。
猜你喜欢
  • 1970-01-01
  • 2022-12-05
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多