2015-01-26 5 views
-4

Я кодирую игру farkle, и я сталкиваюсь с этой проблемой, хотя все, кроме двух, моих утверждений if - это bools.Запрещает сравнение указателя с целым числом?

Кроме того, как я могу позволить пользователю бросить конкретные кости? BloodshedDev/другие IDE, похоже, пока не работают в Windows 8, поэтому я использую Ideone и не имею ничего общего с этим.

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

//global vars 
int bubblehold; 
int roll[6]; 
int score; 
int bank; 
int dicecatch; 
int tempscore = 0; 
int dicenum = 6; 

//function prototype 
void bubblesort(int[], int); 
bool straightsix(); 
bool sixkind(); 
bool fivekind(); 
bool fourkind(); 
bool threekind(); 
int onefive(); 

int main() { 
    srand(time(0)); 
     for(int i=0; i=dicenum-1; i++){ 
     roll[i] = rand()%6+1; 
    } 
    bubblesort(roll,dicenum); 
    for(int i=0; i=dicenum-1; i++){ 
     cout<< roll[i] <<", "; 
    } 

    if(straightsix == true){ 
     tempscore = 1500; 

    } 
    else if(sixkind == true){ 
     tempscore = 3000; 

    } 
    else if(fivekind == true){ 
     tempscore = 2000; 

    } 
    else if(fourkind == true){ 
     tempscore = 1000; 
    } 
    else if(threekind == true){ 
     cout<< tempscore; 
    } 
    else if(onefive == 1){ 
     tempscore = dicecatch * tempscore; 
     cout<< tempscore; 
    } 
    else if(onefive == 5){ 
     tempscore = dicecatch * tempscore; 
     cout<< tempscore; 
    } 

    return 0; 
} 
void bubblesort(int a[], int x){ 
    for (int i = 0; i < x-1; i++){ 
     bubblehold = a[i+1]; 
     a[i+1] = a[i]; 
     a[i] = bubblehold; 
    } 
} 
bool straightsix(){ 
    for(int i=0; i<5; i++){ 
     if(roll[i]+1 != roll[i+5]){ 
      return false; 
     } 
    } 
} 
bool sixkind(){ 
    for(int i=0; i=5; i++){ 
     if (roll[i] != roll[i+5]){ 
      return false; 
     } 
    } 
} 
bool fivekind(){ 
    for(int i=0; i=4; i++){ 
     if (roll[i] != roll[i+4]){ 
      return false; 
     } 
    } 
} 
bool fourkind(){ 
    for(int i=0; i=3; i++){ 
     if (roll[i] != roll[i+3]){ 
      return false; 
     } 
    } 
} 
bool threekind(){ 
    for(int i=0; i=2; i++){ 
     if (roll[i] != roll[i+2]){ 
      return false; 
     } 
     else if(i=1){ 
      dicecatch = 3; 
      tempscore = dicecatch * 100; 
      return true; 
     } 
     else{ 
      dicecatch = i; 
      tempscore = dicecatch * 100; 
      return true; 
     }; 
    } 
} 

int onefive(){ 
    for(int i=0; i=dicenum; i++){ 
     if(roll[i] == 1){ 
      dicecatch = dicecatch + 1; 
      tempscore = tempscore + 100; 
      return 1; 
     } 
     else if(roll[i] == 5){ 
      dicecatch = dicecatch + 1; 
      tempscore = tempscore + 50; 
      return 5; 
     } 
    } 
} 
+2

Я думаю, что вы имели в виду 'if (straightsix() == true)' и т. Д. И т. Д. И т. Д. И т. Д. – user657267

+2

* «Я столкнулся с этой проблемой» * Какая проблема? Где? –

+3

Вы не должны писать этот код, не тестируя его. – Beta

ответ

0

В этой строке

if(straightsix == true){ 

вы сравниваете указатель на функцию с true. У вас есть аналогичные утверждения, связанные с другими функциями.

Возможно, вы имели в виду использовать:

if(straightsix() == true){ 

В этом случае он может быть упрощена:

if(straightsix()){ 
+4

Оставьте символ '== true'. Это бесполезно. –

0

Расширение немного answer of R Sahu, разница фактически только добавил скобка, но Я хотел бы добавить причину.

В C++ (и на самом деле все другие языки C-стиля, о которых я знаю), когда вы обращаетесь к функциям, имеющим скобки, является большой разницей. Включение их означает, что код будет вызовет функцию, выполнить весь ее код и все, что она вернет, будет использоваться при сравнении впоследствии. Скобки также являются основным синтаксисом для передачи параметров и являются обязательными, даже если вы не передаете их при вызове, в отличие от языков базового стиля и многих других.

Опуская скобка имеет совершенно иное значение. Вместо того, чтобы инструктировать выполнение функции, она вернет функцию pointer и никогда не будет запускать какой-либо ее код. Этот указатель, очевидно, не является логическим, и не является int, что дает скорее ошибку компилятора. Все ваши , если в основных есть эта проблема.

Правильное использование вызовов функций являются первоначальный вызов времени и srand, в том числе и в круглых скобках аргумента (ноль) в них.

Смежные вопросы