-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/5、それでも問題に遭遇します。1これらの数値の少なくとも 1 つを非整数にすることで、これを修正できます。たとえば、次のように使用し(9/5.0)ます。

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

    5/9が であることを除いて、同様の説明が他のケースにも当てはまります0

  3. 一部のメソッドの戻り値の型が正しくありません。たとえば、 a を返そうとしているので、関数はではなくdoublea を返すように宣言する必要があります。doubleint

    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);。セルシウスも同様です。& はscanf、プリミティブ型を読み取るときに s に必要です (この背後にある理由は、学習を進めていくうちにわかります。また、別の質問を投稿したり、オンラインの C ガイドを確認したりすることもできます)。

さらに、関数での分解の背後にある理論的根拠については疑問がありますが、繰り返しますが、これはあなたが今学んでいないことです.

于 2013-10-15T01:15:42.950 に答える