0

我是 C++ 新手,想知道为什么无论生成的随机数是什么,输出总是正面。我假设该函数默认为读取第一个 if 语句,但我不知道如何让它在输出文本之前检查这两个选项。提前致谢。

#include <iostream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int coinToss(int);
int main()
{
 int input;
 int counter;
 int toss;
 int check;
 cout<<"Enter the number of times the coin will be tossed:";
 cin>>input;
 coinToss(input);
 system("PAUSE");
 return 0;
}

int coinToss(int input)
{
 int toss;
 int counter = 1;
 while(counter<=input)
 {
  toss = rand() % 2 + 1;
  int check = toss;
  cout<<check<<endl;
  if (toss = 1)
  {
  cout<<"Heads"<<endl;
  }
  else if (toss = 2)
  {
  cout<<"Tails"<<endl;
  }
  counter += 1;
 }
}
4

3 回答 3

5

你需要==,而不是=

= 是赋值 == 是比较。

发生的事情是

toss = 1

将值 1 分配给 toss。然后将其评估为布尔值,解析为真。所以你总是得到头。

于 2013-04-28T19:19:50.207 回答
4

这是分配而不是相等检查:

if (toss = 1)

它导致toss被设置为1并且赋值的结果是1,这意味着if分支总是被输入。使用==

if (toss == 1)

条件相同的错误if else

请注意,该程序具有未定义的行为,因为coinToss()它不返回 anint但具有返回类型int

int coinToss(int input)
{
    // no return!
}

要么制作返回类型void,要么返回一个int.

于 2013-04-28T19:19:36.157 回答
2

以下是分配,而不是比较:

if (toss = 1)

将其更改为

if (toss == 1)

也是如此toss = 2

-Wall启用编译器警告(在 gcc 中)是个好主意。大多数优秀的编译器都会警告您错误的分配。

于 2013-04-28T19:19:56.643 回答