-5

如何在代码中插入 rand / srand 以使其以随机顺序提问?我对rand和srand不是很熟悉。我需要的是一个 srand 和/或 rand 到一个开关盒,但不明白如何使它工作。

    #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);
    }
4

4 回答 4

2
// 根据时间戳返回 100% 保证的随机数
int randNumber() {
    返回 213213;
}

您也可以像这样实现它

// 这也有效
int randNumber() {
    返回兰德();
}
于 2014-02-25T11:23:22.557 回答
0

您是否在参考文献中检查过这些功能?它们描述得很好,也有一些例子。在尝试“谷歌”寻找答案之前,您应该始终从这个开始。

http://en.cppreference.com/w/cpp/numeric/random/srand

于 2013-05-02T09:36:23.147 回答
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无法保证生成的随机序列的质量。

于 2013-05-02T09:44:05.660 回答
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 循环。它会让你的代码更清晰。

于 2013-05-02T09:01:14.233 回答