编写一个程序,模拟重复翻转硬币并持续到三个连续的头被抛出,在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")
部分。如果有人能帮助我纠正这一点,那就太好了。
答案 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*
。你有几个选择:
更改FlipCoin()以返回char*
。然后使用if (strcmp(FlipCoin(flip), "heads") == 0)
。 "heads" == "heads"
适用于C / C ++,但只是因为运气好,因为编译器优化了字符串表。因此指针是相同的,但它并不完全正确。 strcmp()
如果字符串相等则返回0,如果不相等则返回非零。
更改FlipCoin以返回std::string
,然后使用if (FlipCoin(flip) == "heads")
。
你应该从这段代码中获得一些编译器警告,关于从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与一个字符串。