如何在代码中插入rand / srand以使其以随机顺序提问? 我对rand和srand不太熟悉。我需要的是一个srand和/或rand into switch-case但无法理解如何使它工作。
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstdlib>
#include <string>
#include <ctime>
using namespace std;
struct highscore{
int svar;
};
int main(){
ofstream highscore;
bool fail = true;
int lost, fraga, svar = 0; // these are for the Start option
int fraga2; // for srand / rand
int load ,loadh, loadg, tillbaka; // these are for the loading option
string line; // also loading option
char val;
do{
cout << " Menu" << endl;
cout << " 1. Start" << endl;
cout << " 2. Load" << endl;
cout << " 3. Credits" << endl;
cin >> val;
switch(val){
case '1':
highscore.open("Highscore.txt", ios::app);
if (!highscore){
cout << "file could not open";
exit (1);
}
srand(fraga2(time(0));
for (int fraga = 0; fraga< 500; fraga++){
cout << "WELCOME TO THE CISCO QUIZ GOOD LUCK" << endl;
cout << "how many layers are there in the OSI model?" << endl;
cout << "1. 4" << endl;
cout << "2. 5" << endl;
cout << "3. 7" << endl;
cin >> fraga;
switch(fraga){
case 1:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 2:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes, 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 3:
svar = svar + 5;
fraga = fraga + 1;
break;
default:
cout << "error" << endl;
}
if(svar == 5){
cout << "what is the full name of OSPF?" << endl;
cout << "1. Open Shortest Path First" << endl;
cout << "2. Online Shooting Pro Fishing" << endl;
cout << "3. On Short Path First" << endl;
cin >> fraga;
switch(fraga){
case 1:
svar = svar + 5;
fraga = fraga +1;
break;
case 2:
cout << "Game Over!"<< endl;
cout << "Do you wish to restart? (answer with 1 for yes, 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 3:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes, 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
}
}
if(svar == 10){
cout << "What does TTL mean?" << endl;
cout << "1. Twin Twitched Life" << endl;
cout << "2. Two Time Lives" << endl;
cout << "3. Time To Live" << endl;
cin >> fraga;
switch(fraga){
case 1:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with yes, YES or Yes)"<< endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 2:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 3:
svar = svar + 10;
fraga = fraga +1;
break;
}
}
if(svar == 20){
cout << "What is the first command you enter on a Cisco router?" << endl;
cout << " 1. enable"<< endl;
cout << " 2. disable" << endl;
cout << " 3. enter" << endl;
cin >> fraga;
switch(fraga){
case 1:
svar = svar + 5;
fraga = fraga +1;
break;
case 2:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 3:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
}
}
cout << svar;
if(svar == 25){
cout << "which protocol is the most prefered?" << endl;
cout << " 1. RIP" << endl;
cout << " 2. EGRP" << endl;
cout << " 3. EIGRP" << endl;
cin >> fraga;
switch(fraga){
case 1:
cout << "Game Over!" << endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 2:
cout << "Game Over!"<< endl;
cout << "Do you wish to restart? (answer with 1 for yes and 2 for no)" << endl;
cin >> lost;
if(lost == 2 ){
fail = false;
}
break;
case 3:
svar = svar + 15;
fraga = fraga +1;
cout << "You have completed the game press 1 to exit or if you wish to do it again or check highscores press 2" << endl;
cin >> lost;
if (lost == 1 ){
fail = false;
}
else{
fail = true;
}
break;
}
}
}
highscore <<"Score: " << svar << '\n';
highscore.close();
cin.ignore(10,'\n');
cin.get();
case '2':
cout << "type 1 to load game or type 2 to load highscores" << endl;
cin >> load;
if (load == 1){
cout << "in progress";
}
else if(load == 2){
ifstream loadh ("highscore.txt");
if (loadh.is_open())
{
while ( loadh.good() )
{
getline (loadh,line);
cout << line << endl;
}
cout << "do you wish to return to the menu press 1 else press any number" << endl;
if (tillbaka != 1){
fail = false;
}
highscore.close();
}
}
cin.ignore(10,'\n');
cin.get();
break;
case '3':
cout << "made by trickjay the most awesome guy on the planet!!!" << endl;
cin.ignore(10,'\n');
cin.get();
break;
}
}while(fail);
}
答案 0 :(得分:2)
// Returns 100% guaranted random number based on timestamp int randNumber() { return 213213; }
你也可以像
一样实现它// This works too int randNumber() { return rand(); }
答案 1 :(得分:0)
int num;
for( int i=0; i<3 ; i++ ) {
num = rand() % 3;
switch(num) {
case 0: askone(); break;
case 1: asktwo(); break;
case 2: askthree(); break;
}
}
这将为每个程序运行提供相同的顺序。如果你想要一些不太确定的东西,请检查播种。您也可以添加一些机制来避免重复的问题。
不相关,您应该考虑减少程序中的缩进。例如,将一些子任务放入函数中。
此外,您可以将外部do-while循环更改为正常while循环,而无需更改程序行为。它会使你的代码更清晰。
答案 2 :(得分:0)
您是否在参考文献中检查了这些功能?它们描述得很好,也有一些例子。在尝试“谷歌”之前,你应该始终先做到这一点。为了答案。
答案 3 :(得分:0)
如果您使用的是支持C ++ 11的编译器,那么您将拥有新的random
方法:
std::random_device rd;
std::mt19937 e2(rd());
std::uniform_int_distribution<int> dist(0, 2);
int num;
for( int i=0; i<3 ; i++ ) {
num = dist(e2);
switch(num) {
case 0: askone(); break;
case 1: asktwo(); break;
case 2: askthree(); break;
}
}
对于这种情况,它可能没有太大的区别,但从长远来看,不使用std::rand
是有利的,因为它不是线程安全的,rand
生成的随机序列的质量是不保证。