错误:被叫对象'0'不是函数

时间:2013-10-15 01:09:30

标签: c

我在以下代码的两个函数中遇到以下错误:

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

2 个答案:

答案 0 :(得分:4)

这里有一些问题:

  1. 您正在使用某些值的地址而不是这些值。当您致电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

  2. 但是,一旦解决了这些问题,您就可以解决主要问题。

    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之外,其他情况也有类似的解释。

  3. 某些方法的返回类型不正确。例如,由于您尝试返回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;这里错了。 其他功能也是如此。

然后,对您的代码进行一些其他考虑:

  1. scanf("%s", &choice);是一种危险,因为您要求缓冲区溢出。你最好做scanf("%c", &choice);

    char choice[2];
    ...
    scanf("%1s", choice);
    
  2. printf("The temperature in Fahrenheit degree is %d", &fahrenheit);错了。它应该是printf("The temperature in Fahrenheit degree is %d", fahrenheit);。摄氏也是如此。 &amp; scanf s需要,当你正在阅读原始类型时(你可以在进一步学习时了解这背后的原因,或者你可以发布另一个问题,或者查看在线C指南)

  3. 此外,我对你在函数中分解的基本原理有所怀疑,但是,这是你现在还没有学到的东西。