禁止将指针与整数进行比较?

时间:2015-01-26 01:04:48

标签: c++ dice

我正在编写一个farkle游戏,我遇到了这个问题,即使我的if语句中只有两个是bool。

另外,我如何让用户掷出特定的骰子? BloodshedDev / othre 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 个答案:

答案 0 :(得分:0)

在这一行中,

if(straightsix == true){

您正在将函数指针与true进行比较。你有类似的声明涉及其他功能。

也许您打算使用:

if(straightsix() == true){

在这种情况下,它可以简化为:

if(straightsix()){

答案 1 :(得分:0)

扩展answer of R Sahu,差异实际上只是添加的括号,但我想补充原因。

在C ++中(实际上我所知道的所有其他C风格的语言),当你提到具有括号的函数时,这是一个很大的区别。将它们置于上面意味着代码将调用函数,执行其所有代码,然后返回的任何内容将用于比较。括号也是传递参数的基本语法,即使你在调用时没有传递任何参数,也是强制性的,与基本风格的语言和许多其他语言不同。

省略括号的含义完全不同。它不会指示执行函数,而是向函数返回pointer,并且永远不会运行任何代码。该指针显然不是布尔值,也不是 int ,它最有可能产生编译错误。 main 中的所有 if 都存在此问题。

正确使用函数调用是对 time srand 的初始调用,包括括号和参数(零)。