作为一项任务,我必须编写一个代码,该代码接受用户输入,对它们执行操作,然后将它们打印到屏幕上。但是,我继续在第18行收到错误,我在其中调用FunctionMultiply,说该函数无法转换' double(_cdecl *)()'到'加倍我搜索了这种类型的问题,但似乎所有这些都与我的代码中没有的数组有关。我该如何解决这个问题?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <ctype.h>
int GetInt(void);
double GetDouble();
char GetLetter(void);
double FunctionMultiply(int, double);
int FunctionCharacter(char);
int main()
{
GetInt();
GetDouble();
GetLetter();
FunctionMultiply(GetInt, GetDouble);
FunctionCharacter(GetLetter);
printf("%f", FunctionMultiply);
printf("%c", FunctionCharacter);
return 0;
}
int GetInt(void)
{
int integer;
printf("Enter an integer\n");
scanf("%i", &integer);
return integer;
}
double GetDouble()
{
double dub;
printf("Enter a floating point number\n");
scanf(" %lf", &dub);
return dub;
}
char GetLetter(void)
{
char letter;
printf("Enter a letter\n");
scanf(" %c", &letter);
return letter;
}
double FunctionMultiply(int arg1, double arg2)
{
double product = arg1 * arg2;
return product;
}
int FunctionCharacter(char letter)
{
if (toupper(letter) <= 'M')
{
return 0;
}
else
{
return 1;
}
}
答案 0 :(得分:4)
我认为您将功能标识符与存储混淆。您刚开始调用了一堆函数,而不是将结果存储在任何函数中。
似乎您希望自己使用函数标识符将为您提供上次调用该函数的结果。但事实并非如此。
以下是存储返回值并稍后使用它们的方法:
int my_int = GetInt();
double my_double = GetDouble();
char my_char = GetLetter();
double multiply_result = FunctionMultiply( my_int, my_double );
char char_result = FunctionCharacter( my_char );
printf( "%f", multiply_result );
printf( "%c", char_result );
答案 1 :(得分:2)
像这样修改你的main()
:
int main()
{
int i = GetInt();
double d = GetDouble();
char c = GetLetter();
double a = FunctionMultiply(i, d);
char c = FunctionCharacter(c);
printf("%f", a);
printf("%c", c);
return 0;
}
您的问题是您传递的是函数名称而不是调用它们。即GetInt
而不是GetInt()
。
答案 2 :(得分:1)
看起来您没有注意显示如何使用功能的课程或示例。
GetInt();
这将调用GetInt
函数,并忽略其返回值。
GetDouble();
这将调用GetDouble
函数,并忽略其返回值。
GetLetter();
这会调用GetLetter
函数,并且......您现在知道得分。
FunctionMultiply(GetInt, GetDouble);
这只是胡说八道。您正在尝试调用FunctionMultiply
函数,将函数GetInt
和GetDouble
作为参数传递。您需要传递int
和double
,但是您没有int
和double
,因为您没有存储{{1}的结果和GetInt
任何地方。
你应该这样做:
GetDouble
现在您拥有保存这些函数调用结果的变量int i = GetInt();
double d = GetDouble();
char l = GetLetter();
,i
和d
,因此您可以将它们传递给其他函数:
l
答案 3 :(得分:1)
在您调用该函数一次之后,您似乎认为函数的名称会神奇地更改为调用的结果。
没有。函数调用表达式本身就是调用的结果。
而不是
ReturnADouble();
// call ^ and value v somehow separated? Why did you ever think that?
double result = ReturnADouble;
但是根据语言规则,ReturnADouble
仍然是函数的名称,当你给出一个函数的名称时,编译器会正确地抱怨你应该给出一个数值。
您的代码应该更像
double result = ReturnADouble();
// ^ this call results in a value