练习17.31
对于本节中的游戏程序,如果在do循环内定义b和e,会发生什么?
解答:
#include <iostream>
#include <random>
#include <string>
using namespace std;
int main(){
string resp;
//default_random_engine e;
//bernoulli_distribution b;
do{
default_random_engine e;
bernoulli_distribution b;
cout << e() << endl;
cout << b(e) << endl;
bool first = b(e);
cout << (first? "We go first" : "You get to go first") << endl;
//cout << ((play(first))? "Sorry, you lost" : "congrats, you won") << endl;
cout << "play again? Enter 'yes' or 'no'" << endl;
} while(cin >> resp && resp[0] == 'y');
}
可以尝试这样写代码进行验证。
b放在循环内部,或者循环外部都是可以的。
但是,当把e的声明放在循环内部的话,每次生成的数就一样了。放在循环外部e就能保持状态,每次都会生成不同的随机数。
练习17.32
如果我们再循环内部定义resp,会发生声明?
解答:
这个很容易看出来。编译阶段就会出现问题。
在while语句中肯定会提示resp没有定义。
练习17.33
修改11.3.6节(第392页)中的单词转换程序,允许你对一个给定单词有多种转换方式,每次随机选择一种进行实际转换。
解答:
这个就略过吧。
用随机数操作来进行选择对应的转换即可。