布尔函数错误
Error with bool function
我是一个新的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|error: conflicting types for 'checkResult'
起初,我认为出于某种原因,在 C 中你只能将某些数据类型作为参数传递给 bool
方法,尽管我在 [=25= 上找不到直接的答案].除此之外;我不明白 "conflicting types" 是什么意思(这是我第一次调试 C 程序。
我曾经调用过的函数checkResult
如下:
在调用函数之前,您还需要编写其原型。默认情况下,编译器将其视为 int
的 return 类型,但实际上它是 bool
.
所以在调用checkResult
之前写bool checkResult(int initialVal, int finalVal, char input)
。
您的代码中可能有错字。该行
bool checkResult(initialVal, newVal, temp);
为 bool
函数隐式创建原型。在 C99 之前的 C 版本中,参数的类型被省略并默认为 int
。此声明与实际声明冲突,其第三个参数的类型为 char
.
你的意思可能是这样的:
bool okay = checkResult(initialVal, newVal, temp);
这定义了一个 bool
变量 okay
并用函数调用的结果初始化它。 (但请注意,此变量是当前范围的本地变量,因此在您的示例中,您会立即丢失结果。)
在 C 语言中,在函数体内声明函数是合法的,尽管这不是好的做法。通常在文件头或文件开头声明它们。
自 C99 起,隐式函数声明无效。也没有 int
类型的默认参数或函数 return。您可能会考虑强制执行 C99 标准(例如,在 gcc 中使用 -std=c99
)以避免落入隐式声明陷阱。
您在声明 them.So 之前调用了函数是错误的。因为默认情况下,c 函数的 return 类型是 "int"。
添加
void completeRound(int , char , int );
和
bool checkResult(int , int , char);
在你的 typedef 之后(这种方式比在调用函数的主体中声明它们更好)。
并且由于 checkResult()
是 return 类型 bool
的值,您最好将其分配给 bool
类型的变量,例如
bool okay = checkResult(initialVal, newVal, temp); this.
我是一个新的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|error: conflicting types for 'checkResult'
起初,我认为出于某种原因,在 C 中你只能将某些数据类型作为参数传递给 bool
方法,尽管我在 [=25= 上找不到直接的答案].除此之外;我不明白 "conflicting types" 是什么意思(这是我第一次调试 C 程序。
我曾经调用过的函数checkResult
如下:
在调用函数之前,您还需要编写其原型。默认情况下,编译器将其视为 int
的 return 类型,但实际上它是 bool
.
所以在调用checkResult
之前写bool checkResult(int initialVal, int finalVal, char input)
。
您的代码中可能有错字。该行
bool checkResult(initialVal, newVal, temp);
为 bool
函数隐式创建原型。在 C99 之前的 C 版本中,参数的类型被省略并默认为 int
。此声明与实际声明冲突,其第三个参数的类型为 char
.
你的意思可能是这样的:
bool okay = checkResult(initialVal, newVal, temp);
这定义了一个 bool
变量 okay
并用函数调用的结果初始化它。 (但请注意,此变量是当前范围的本地变量,因此在您的示例中,您会立即丢失结果。)
在 C 语言中,在函数体内声明函数是合法的,尽管这不是好的做法。通常在文件头或文件开头声明它们。
自 C99 起,隐式函数声明无效。也没有 int
类型的默认参数或函数 return。您可能会考虑强制执行 C99 标准(例如,在 gcc 中使用 -std=c99
)以避免落入隐式声明陷阱。
您在声明 them.So 之前调用了函数是错误的。因为默认情况下,c 函数的 return 类型是 "int"。 添加
void completeRound(int , char , int );
和
bool checkResult(int , int , char);
在你的 typedef 之后(这种方式比在调用函数的主体中声明它们更好)。
并且由于 checkResult()
是 return 类型 bool
的值,您最好将其分配给 bool
类型的变量,例如
bool okay = checkResult(initialVal, newVal, temp); this.