C++ 用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
#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用于社区。