Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 用C+编写一个程序,模拟反复抛硬币,直到连续抛出三个硬币头+;_C++ - Fatal编程技术网

C++ 用C+编写一个程序,模拟反复抛硬币,直到连续抛出三个硬币头+;

C++ 用C+编写一个程序,模拟反复抛硬币,直到连续抛出三个硬币头+;,c++,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; i

用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";
    }
}
#包括
#包括
#包括
#包括
#包括“random.h”
使用名称空间std;
布尔抛硬币(int-flip);
int main(){
内翻;
int头=0;
int total_flips=0;
而(头数<3){
总翻转次数++;
如果(抛硬币(flip)=“头”){
heads++;
}否则{
头数=0;
}
}

您可以使用返回类型
bool
定义
FlipCoin()
,但您将从中返回
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()的警告。

    您写道:

    bool FlipCoin [....] return "heads";
    
    您认为
    “heads”
    /
    “tails”
    符合
    布尔类型吗

    您应该决定
    FlipCoin
    是返回
    true
    /
    false
    ,还是返回字符串

    解决该问题后,可以修复if语句比较:

    if(FlipCoin(flip) == "heads"){
    
    与布尔或字符串进行比较


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

    因为字符串效率低且容易出错(一次输入错误,比较失败,而编译器保持绝对沉默)bools不能很好地表示硬币的正面(是正面还是反面?),最好的书写方法是使用枚举:

    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) {
        ...
      }
    }
    

    你可以用=完全满意地比较C++字符串,而且没有运气。这也是一个更可读的地狱。也许你以前的生活中是java开发人员?@ Purdie-你是正确的。我很久以前没有使用过STD::字符串,在CPLUPLPLUS()上脱离文档。,这需要再单击一次才能找到关系运算符。我编辑了我的答案,以反映更简单的语法。答案在那里,但隐藏得相当好:您甚至不需要显式构造。如果FlipCoin返回std::string,则
    FlipCoin(flip)==“heads”
    将起作用。@SebastianRedl,同样正确。您的评论已编辑到答案中。+1用于社区。