这个程序的目标是有一个随机数生成器,我可以通过一个函数在main中使用它。然后来自随机数生成器的值将触发一个动作。这有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;
}
}
谢谢。
答案 0 :(得分:2)
您需要使用
if ( (RanNum == 1) ||
(RanNum == 2) ||
(RanNum == 3) ||
(RanNum == 4) ||
(RanNum == 5) )
而不是
if (RanNum = 1||2||3||4||5)
与其他if
语句类似。
这是一个问题。
另一个问题是你有这条线:
int RanNum;
<{1>}中的,但您尚未为其指定任何值。
您已在main
中为同名的本地变量指定了值,但不会更改RanNum1to10
中RanNum
的值。
您可以通过将main
的返回值更改为RanNum1to10
,并从中返回随机数,并将int
的返回值分配给{{1}来解决该问题}。
更改行
RanNum1to10
到
RanNum
更改行
void RanNum1to10();
到
int RanNum1to10();
将 RanNum1to10();
的实施更改为:
RanNum = RanNum1to10();
更新,以回应OP的评论
由于运算符优先级,表达式RanNum1to10
相当于int RanNum1to10()
{
return (rand() % 10 + 1);
}
,相当于if (x = 2||3||4)
。如您所见,这种if ( x = (2 || 3 || 4) )
语句的条件总是计算为真。
答案 1 :(得分:0)
第一个问题: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)