bool函数出错

时间:2015-07-21 09:02:13

标签: c function boolean

我是一名新的C开发人员(我习惯用Java编程),并尝试过创建,我认为这是一个简单的bool函数。虽然我收到的错误是我不明白如何修复:

#include <stdio.h>
#include <stdlib.h>
typedef enum { false, true } bool;
int main() {
    int currentNumber, round = 1;
    printf("Numbers generated will be between 1 and 20. \n");
    currentNumber = rand() % 20;
    bool validNumber = false;
    do {
        if(currentNumber != 0) {
            validNumber == true;
        } else {
            currentNumber = rand() % 20;
        }
    }while(validNumber == false);
    printf("You're on round" + ("%d", round));
    printf("You're current number is: " + ("%d", currentNumber));
    printf("Higher or Lower (H/L)?");
    char userInput [20];
    scanf("%s", &userInput);
    if((userInput[0] == 'h') || (userInput[0] == 'H')) {
        completeRound(round, 'H', currentNumber);
    } else if((userInput[0] == 'l') || (userInput[0] == 'L')) {
        completeRound(round, 'L', currentNumber);
    }
}

void completeRound(int round, char input, int currentNumber) {
    int initialVal = currentNumber, newVal;
    if(input == 'H') {
        newVal = rand() % 20;
        bool checkResult(initialVal, newVal, input);
    } else {
        newVal = rand() % 20;
        bool checkResult(initialVal, newVal, input);
    }
}

bool checkResult(int initialVal, int finalVal, char input);
bool checkResult(int initialVal, int finalVal, char input) {
    if(input == 'H') {
        if(initialVal <= finalVal) {
            return true;
        } else {
            return false;
        }
    }
    if(input == 'L') {
        if(initialVal >= finalVal) {
            return true;
        }else {
            return false;
        }
    }
    printf("An error has occurred! Aborting game...");
    return false;
}

错误如下:

  

\ main.c | 39 |错误:&#39; checkResult&#39;

的冲突类型

起初,我认为由于某种原因,在C中你只能将某些数据类型作为参数传递给bool方法,尽管我在Google上找不到这个直接答案。除此之外;我无法理解&#34;冲突的类型&#34; (这是我第一次调试C程序。

我用来调用checkResult的函数如下:

3 个答案:

答案 0 :(得分:3)

在调用函数之前,您还需要编写其原型。默认情况下,编译器将其视为int的返回类型,但实际上它是bool

所以在致电bool checkResult(int initialVal, int finalVal, char input)之前写checkResult

答案 1 :(得分:2)

您的代码中可能有拼写错误。这条线

bool checkResult(initialVal, newVal, temp);

隐式创建bool函数的原型。参数的类型被省略,并且在C99之前的C版本中默认为int。此声明与实际声明冲突,第三个参数的类型为char

你可能意味着这样的事情:

bool okay = checkResult(initialVal, newVal, temp);

这定义了bool变量okay并使用函数调用的结果对其进行初始化。 (但请注意,此变量是当前范围的本地变量,因此在您的示例中,您将立即丢失结果。)

在C中声明一个函数体内的函数是合法的,尽管这不是一个好习惯。通常在标题中或文件的开头声明它们。

从C99开始,隐式函数声明无效。还没有int的默认参数或函数返回类型。您可以考虑强制执行C99标准(例如,在gcc中使用-std=c99)以避免陷入隐式声明陷阱。

答案 2 :(得分:1)

在声明函数之前调用了函数。所以是错误。因为默认情况下,c函数的返回类型是&#34; int&#34;。 添加

void completeRound(int , char , int );

 bool checkResult(int , int , char);

在你的typedef之后(这比在调用函数的主体中声明它们更好)。

由于checkResult()返回bool类型的值,您最好将其分配给bool类型的变量,例如

bool okay = checkResult(initialVal, newVal, temp); this.