2017-10-08 3 views
-2

J'écris un programme pour simuler un jet de dés avec une fonction aléatoire. Ceci est mon code, mais j'ai une boucle infinie. Le programme est censé demander à l'utilisateur combien de fois ils aimeraient lancer les dés. Ensuite, j'ai utilisé une boucle for pour lancer les dés de 0 à et j'ai mis tout cela dans un do-while afin de permettre seulement à l'utilisateur de choisir entre 1 et 6, si la sélection est en dehors de 1 à 6 est censé dire que c'est une sélection invalide. Je ne suis pas autorisé à utiliser des fonctions ou des tableaux sur cesimulation de lancer de dés unique avec C++

#include<iostream> 
#include <iomanip> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

int main() 
{ 
    //i is the counter for the loop 
    int i = 0; 
    //store total count for landing number 
    int num1 =0; 
    int num2 =0; 
    int num3 =0; 
    int num4 =0; 
    int num5 =0; 
    int num6 =0; 

    int Num1 =0; 
    int Num2 =0; 
    int Num3 =0; 
    int Num4 =0; 
    int Num5 =0; 
    int Num6 =0; 
    int randNum; 
    int times; 


    //User selection 
    int selection; 


    /* initialize random seed: */ 
    srand ((unsigned int)time(NULL)); 

    /* generate random number: */ 
    randNum = rand() % 6 + 1; 

    cout<<"How many times would you like to roll the dice? " << endl; 
    cin >> selection; 

    do{ 
     for(i = 1; i <= selection; i++) 
     { 

      if(randNum==1) 
      { 
       num1++; 
      } 
      else if(randNum==2) 
      { 
       num2++; 
      } 
      else if(randNum==3) 
      { 
       num3++; 
      } 
      else if(randNum==4) 
      { 
       num4++; 
      } 
      else if(randNum==5) 
      { 
       num5++; 
      } 
      else if(randNum==6) 
      { 
       num6++; 
      } 
     } 
    Num1 = num1/times *100; 
    Num2 = num2/times *100; 
    Num3 = num3/times *100; 
    Num4 = num4/times *100; 
    Num5 = num5/times *100; 
    Num6 = num6/times *100; 


    cout <<"# Rolled \t # Times \t % Times" << endl; 
    cout <<"----- \t ------- \t -------" << endl; 
    cout <<" 1 \t " << num1 << "\t " << fixed << setprecision(2) << Num1 << "%\n"; 
    cout <<" 2 \t " << num2 << "\t " << fixed << setprecision(2) << Num2 << "%\n"; 
    cout <<" 3 \t " << num3 << "\t " << fixed << setprecision(2) << Num3 << "%\n"; 
    cout <<" 4 \t " << num4 << "\t " << fixed << setprecision(2) << Num4 << "%\n"; 
    cout <<" 5 \t " << num5 << "\t " << fixed << setprecision(2) << Num5 << "%\n"; 
    cout <<" 6 \t " << num6 << "\t " << fixed << setprecision(2) << Num6 << "%\n"; 
    } 

    while(i >= 1 || i <= 6); 
    { 
     cout << "This is an invalid number. \n" 
     << "The number of rolls should be equal to or greater than 1.\n" 
     << "Please enter again.\n"; 
    } 
} 
+0

Semble que vous voulez vérifier une entrée valide avant de faire tout le travail et la production. Vous pourriez considérer un tableau pour les comptes, ce serait un code beaucoup plus simple. 'times 'n'est pas initialisé lorsque vous l'utilisez, et maths entières va vous donner des valeurs incorrectes. Vous pourriez également mettre les dés à l'intérieur de la boucle for. –

+1

Et quand vous avez utilisé votre débogueur pour exécuter votre code, une ligne à la fois, quelle était la raison pour laquelle le code exécuter votre "boucle infinie"? –

+0

Salut, je ne suis pas autorisé à utiliser tableau ou fonction pour ce code – codeeeeeNOT

Répondre

0

La boucle infinie est le do - while ...

Je ne suis pas sûr de ce que vous essayez de faire là-bas, mais vous toujours obtenir un nombre supérieur à 1 ou inférieur à 6 dans votre test - vous ne pouvez pas échouer à la fois ...

2

Votre déclaration conditionnelle: i = 1; i <= selection; i++ devrait aller dans la finale pendant que vous avez.

Essayez:

do { 
    if (randNum==1) { 
     num1++; 
    } else if(randNum==2) { 
     num2++; 
    } else if(randNum==3) { 
     num3++; 
    } else if(randNum==4) { 
     num4++; 
    } else if(randNum==5) { 
     num5++; 
    } else if(randNum==6) { 
     num6++; 
    } 
    i += 1; 
} while (i <= selection);