2014-12-06 118 views
0

这里是我所创建的功能:我想它选择0或1随机随机选择0和1之间

tJugador quienEmpieza(){ 
    rand() 
    tJugador whoStarts = tJugador(rand() % 2); // randomly assigns player 
    return whoStarts; 

。它每次选择0。应该随机选择玩家角色或玩家自动机的游戏。我只需要搞清楚如何使功能选择0或1

这里是整个方案与建议的更改帮助:

#include <iostream> 
#include<ctime> 
#include<cstdlib> 
#include <string> 

using namespace std; 

const int Meta = 31; 
enum tJugador { Automata, Persona }; 


tJugador quienEmpieza(); 
tJugador pasalacalculador(); 

int digitoAleatorio(); 
int digitoAutomata(int ultimo); 

int digitoPersona(); 
int digitoPersona(int ultimo); 

bool mismaFila(int ultimo, int nuevo); 
bool mismaColumna(int ultimo, int nuevo); 
bool digitoValido(int ultimo, int nuevo); 



int main() 

{ 
    std::srand(time(NULL)); 

    int pasalacalculadora(); 
    int whoStarts = 0; 
    int d = 0; 
    int suma; 
    suma = 0; 
    string nom; 
    int ultimo; 
    ultimo = 0; 
    int x = 0; 
    int next = 0; 

    cout << "Bienvenido a Pasa La Calculadora!" << endl; 
    cout << "Como Te llamas?"; 
    cin >> nom; 
    cout << "Hola:" << nom << endl; 
    cout << "Empiezas:"; 

    if (whoStarts == 0) 
    { 
     std::cout << "Automata" << endl; 


    } 
    else if (whoStarts == 1) 
    { 
     std::cout << "Persona" << endl; 

    } 


    while ((x != 0) && (suma < Meta)) { 

     cout << "Introduce un numero (0 para abandonar): "; 
     cin >> d; 

     cout << "Suma =" << suma << endl; 

     if (whoStarts == Automata){ 

      d = digitoAutomata(ultimo); 
      suma = suma + d; 
      ultimo = d; 
      next = Persona; 
     } 

     if (whoStarts == Persona){ 

      x = digitoPersona(); 
      suma = suma + x; 
      ultimo = x; 
      next = Automata; 
     } 


    } 
    cin.sync(); 
     cin.get(); 
     system("pause"); 
     return next; 

} 



tJugador quienEmpieza(){ 
    rand(); 
    tJugador whoStarts = tJugador(rand() % 2); // randomly assigns player 
    return whoStarts; 
} 




int digitoAleatorio(){ 
    return (rand() % 9) + 1;         // randomly assigns a number 


    if (quienEmpieza == 0) 
    { 
     std::cout << "Introduce un digito:" << digitoAleatorio << endl; 
     std::cout << ("Suma:") << digitoAleatorio << endl; 

    } 


} 

int digitoAutomata(int ultimo){ 
    bool validDigit = false; 
    int digitoAleatorio = 0; 
    int d = 0; 

    if (digitoAleatorio == validDigit) { 

     (d = true); 



     return d; 
    } 
} 


int digitoPersona(){ 
    int x; 
    int whoStarts = 0; 

    if (whoStarts == 1) 
    { 
     cout << "Introduce un numero entre 0 y 9(0 para abandonar): "; 
     cin >> x; 
    } 

    if ((x >= 1) && (x <= 9)) 

    { 
     cout << ("Suma:") << x << endl; 
    } 
    return x; 
}  
} 
+0

tJugador究竟做了什么?发布代码。顺便说一下,whoStarts的类型是'tJugador'而不是'int' – nbro 2014-12-06 16:39:18

+0

它选择了人物角色或自动机 – Create881 2014-12-06 17:08:58

+1

我看不到你在哪里调用函数'quienEmpienza'。在你的函数中,'digitoAleatorio'你有一个if语句来检查'quienEmpieza == 0' ,但是这个全局变量在哪里?也许你想调用这个函数?所以它会是'quienEmpieza()== 0'? – nbro 2014-12-06 17:19:33

回答

2

我看到你的方法有几个问题:

  • 你使用%3应从{0,1,2}
  • 你初始化每次调用随机时间的种子选择一个随机数

通常,您应该只初始化您的随机数发生器一次,然后多次调用rand()。所以我的问题是:您拨打rand()多少次来评估生成的值的分布?

随机数字的事情是,它们是随机的,因此调用rand()两次或三次将产生三个连续的0值是有可能的。最重要的是,rand()是一个伪随机数发生器,这意味着它不是随机的,它只是设计看起来随机。

要评估结果分布,您应该生成几千个数字(甚至数十或数十万),然后查看0的数目是否大约等于您获得的1的数量。

+0

进行了您所建议的更改,但每次仍然返回0 ... – Create881 2014-12-06 17:13:25

-3

在程序开始时使用srand 一次例如,

int main() 
{ 
    srand(time(nullptr)); 
    // do work 
} 

我会从更大的频谱,例如, 1000并检查数字是奇数还是偶数,并因此确定0或1,例如 ,例如

num = rand() % 1000; 
if (num % 2 == 0) 
    // 0 
else 
    // 1 
// or the other way around 
//or simply go 
rand() % 2; // was % 1 
+2

'rand()%1'将始终为零。 – slugonamission 2014-12-06 16:41:19

+0

哦,大家好,所有的语言和非标准我混在一起,它是一个开放的Intervall,所以很抱歉...将正确 – smoothware 2014-12-06 16:42:57

1

我没有在您的代码中看到您正在调用函数quienEmpienza。在你的函数digitoAleatorio你有一个if语句检查quienEmpieza == 0,但这个全局变量是quienEmpieza?也许你想直接在if语句中调用函数?那么它会是quienEmpieza() == 0

我想你总是0,因为whoStarts被初始化为0,并且你不会在任何地方调用quienEmpieza,正如我上面提到的。

+1

表达式'quienEmpienzia == 0'将检查指向函数'quienEmienzia'是空指针。当然,它从来不是空指针,所以表达式总是被评估为“假”。 – celtschk 2014-12-07 20:54:55