-1

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

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
4

2 回答 2

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),即通过整数算术,0。因此,您需要使用 明确乘法*,因此您将拥有

    (9/5)*(celsius+32)
    

    但是你仍然会遇到问题,因为它9/51整数算术。您可以通过将这些数字中的至少一个设为非整数来解决此问题,例如,通过使用(9/5.0)

    fahrenheit = (9/5.0) * (celsius + 32);
    

    类似的解释适用于另一种情况,除了5/90

  3. 您的某些方法的返回类型不正确。例如,由于您要返回 a double,因此需要将函数声明为返回 a double,而不是 a int

    int Celsius_Converter () // needs to be double
    {
    double celsius;
    ...
    celsius = (5/9) (&fahrenheit - 32);
    return celsius;
    } //end Celsius_Converter
    
于 2013-10-15T01:14:17.123 回答
0

首先,回答你的问题:

(9/5) (&celsius + 32)是一个函数调用,更准确地说,您正在尝试调用函数 9/5,即 1,并传递 &celsius + 32(这是一个错误)作为其参数。你想做的大概是(9/5) * (&celsius + 32)。C 中没有隐式运算符。实际上,应该是(9/5) * (celsius + 32):& 在这里是错误的。其他功能也是如此。

然后,关于您的代码的其他一些注意事项:

  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);。摄氏也是如此。& 是 s 所需要scanf的,当您阅读原始类型时(随着您的进一步学习,您将了解其背后的原因,或者您可以发布另一个问题,或查看在线 C 指南)。

此外,我对您分解功能背后的基本原理有一些疑问,但是,同样,这是您现在不学的东西。

于 2013-10-15T01:15:42.950 回答