我在以下代码的两个函数中遇到以下错误:
In function 'Celsius_Converter':
Line 64: error: called object '0' is not a function
In function 'Fahrenheit_Converter':
Line 90: error: called object '1' is not a function
这是我的代码:
/*
*Program Name: COP 2220-10018 Project 3
*
* Author: Nathan Gamble
*
* Description: Convert either Celsius to Fahrenheit, or Fahrenheit to Celsius.
*
* Input: Celsius or Fahrenheit Temperature
*
* Output: Fahrenheit or Celsius, depending on which one the User requested.
*/
#include <stdio.h>
#include <math.h>
int main (void)
{
//Local Declarations
char choice;
int fahrenheit;
int celsius;
//Statements
printf("This program converts Celsius temperature to Fahrenheit degree and Fahrenheit temperature to Celsius degree. \n");
printf("If you want to convert Celsius to Fahrenheit, please enter C.");
printf("If you want to convert Fahrenheit to Celsius, please enter F.");
scanf("%s", &choice);
//Process
if (choice == 'C') {
fahrenheit = Celsius_Converter();
printf("The temperature in Fahrenheit degree is %d", &fahrenheit);
}
else {
celsius = Fahreinheit_Converter();
printf("The temperature in Celsius degree is %d", &celsius);
}
return 0;
} // End main
/*
*Program Name: COP 2220-10018 Project 3
*
* Author: Nathan Gamble
*
* Description: Convert Celsius to Fahrenheit
*
* Input: Celsius Temperature
*
* Output: Fahrenheit
*/
int Celsius_Converter ()
{
//Local Declarations
double fahrenheit;
double celsius;
printf("Enter a temperature in Celsius.");
scanf("%d", &fahrenheit);
celsius = (5/9) (&fahrenheit - 32);
return celsius;
} //end Celsius_Converter
/*
*Program Name: COP 2220-10018 Project 3
*
* Author: Nathan Gamble
*
* Description: Convert Fahrenheit to Celsius
*
* Input: Fahrenheit Temperature
*
* Output: Celsius
*/
int Fahrenheit_Converter ()
{
//Local Declarations
double fahrenheit;
double celsius;
printf("Enter a temperature in Fahrenheit.");
scanf("%d", &celsius);
fahrenheit = (9/5) (&celsius + 32);
return fahrenheit;
} //end Fahrenheit_Converter
答案 0 :(得分:4)
这里有一些问题:
您正在使用某些值的地址而不是这些值。当您致电celsius
时,您使用scanf
的地址(这是正确的,因为scanf
需要知道存储值的位置):
double celsius;
scanf("%d", &celsius);
但是当你做算术时你需要celsius
本身,而不是它的地址:
fahrenheit = (9/5) (celsius + 32); // instead of &celsius
在其他转化例程中存在类似的错误,您使用&fahrenheit
而不是fahrenheit
。这也是输出中的问题。在打印时,您需要使用变量的值,而不是其地址。所以
printf("The temperature in Celsius degree is %d", &celsius);
也应该使用celsius
,而不是&celsius
。
但是,一旦解决了这些问题,您就可以解决主要问题。
something (...)
是C中的函数调用语法。这意味着当你这样做时,例如(9/5)(celsius + 32)
,你试图调用函数(9/5)
,即通过整数运算{{1} }。因此,您需要使用0
显式进行乘法,因此您需要
*
但是你仍会遇到(9/5)*(celsius+32)
是9/5
的问题,因为它是整数算术。您可以通过使这些数字中的至少一个为非整数来解决此问题,例如,使用1
:
(9/5.0)
除了fahrenheit = (9/5.0) * (celsius + 32);
是5/9
之外,其他情况也有类似的解释。
某些方法的返回类型不正确。例如,由于您尝试返回0
,因此需要声明该函数返回double
,而不是double
。
int
答案 1 :(得分:0)
首先,回答你的问题:
(9/5) (&celsius + 32)
是一个函数调用,更确切地说,您正在尝试调用函数9/5,即1,传递&amp; celsius + 32(这是一个错误)作为其参数。
你想做的可能是(9/5) * (&celsius + 32)
。在C中没有隐式算子这样的东西。实际上,它应该是(9/5) * (celsius + 32)
:&amp;这里错了。
其他功能也是如此。
然后,对您的代码进行一些其他考虑:
scanf("%s", &choice);
是一种危险,因为您要求缓冲区溢出。你最好做scanf("%c", &choice);
或
char choice[2];
...
scanf("%1s", choice);
printf("The temperature in Fahrenheit degree is %d", &fahrenheit);
错了。它应该是printf("The temperature in Fahrenheit degree is %d", fahrenheit);
。摄氏也是如此。 &amp; scanf
s需要,当你正在阅读原始类型时(你可以在进一步学习时了解这背后的原因,或者你可以发布另一个问题,或者查看在线C指南)
此外,我对你在函数中分解的基本原理有所怀疑,但是,这是你现在还没有学到的东西。