编写一个程序,模拟重复翻转硬币并继续,直到三个连续的头被抛出,用C ++编写

时间:2015-02-26 12:24:39

标签: c++

编写一个程序,模拟重复翻转硬币并持续到三个连续的头被抛出,在C ++中

#include <iostream>
#include <cmath>
#include <string>
#include <cstdlib>
#include "random.h"


using namespace std;

bool FlipCoin(int flip);

int main(){ 

    int flip;
    int heads = 0;
    int total_flips = 0;
    while( heads < 3){
        total_flips++;
        if(FlipCoin(flip) == "heads"){
            heads++;
        } else{
            heads = 0;
        }
    }
    cout << "it took " << total_flips << "to get 3 consecutive heads. " << endl;

}   


bool FlipCoin(int flip) {

    if (randomChance(0.50)) {
        return "heads";
    } else {
        return "tails";
    }
}

我在代码的主体中收到此错误,指出

  

ISO C ++禁止在指针和整数

之间进行比较

if (FlipCoin(flip) == "heads")部分。如果有人能帮助我纠正这一点,那就太好了。

3 个答案:

答案 0 :(得分:2)

由于字符串效率低且容易出错(一个拼写错误,你的比较失败,而编译器保持绝对安静)和bool不能很好地代表硬币方面(真正的正面或反面?),写这个的最好方法正在使用枚举:

enum class CoinSide { heads, tails };

CoinSide FlipCoin() { // note: you don't need the "flip" parameter
  if (randomChance(0.50)) {
    return CoinSide::heads;
  } else {
    return CoinSide::tails;
  }
}

int main() {
  ...
  if (FlipCoin() == CoinSide::heads) {
    ...
  }
}

答案 1 :(得分:1)

您已定义FlipCoin(),其返回类型为bool,但您已从中返回char*。你有几个选择:

  1. 更改FlipCoin()以返回char*。然后使用if (strcmp(FlipCoin(flip), "heads") == 0)"heads" == "heads"适用于C / C ++,但只是因为运气好,因为编译器优化了字符串表。因此指针是相同的,但它并不完全正确。 strcmp()如果字符串相等则返回0,如果不相等则返回非零。

  2. 更改FlipCoin以返回std::string,然后使用if (FlipCoin(flip) == "heads")

  3. 你应该从这段代码中获得一些编译器警告,关于从bool函数返回char *,以及将未使用的参数(flip)传递给FlipCoin()。

答案 2 :(得分:0)

您写道:

bool FlipCoin [....] return "heads";

您认为"heads" / "tails"符合boolean类型吗?

您应该决定FlipCoin是否会返回true / false,或者返回一个字符串。

在你解决了这个问题之后,你可以修复你的if语句比较:

if(FlipCoin(flip) == "heads"){

要么与bool或字符串进行比较。

但是现在,声明FlipCoin返回bool没有任何意义,实际上返回一个字符串,尝试将字符串转换为bool,然后尝试将bool与一个字符串。