5

私は C が初めてで、ミニ電卓プログラムを作成する必要があります (これは宿題ですが、答えを探しているわけではなく、もう少し理解する必要があります)。基本的に、1 つの関数は次のようになります。

int add(double d, double dd, double *result);

エラーがない場合は 0 を返し、エラーが発生した場合は -1 を返します (加算の場合、多くのエラーはありませんが、0 による除算などの除算はエラーになります)。

ユーザーは端末に 2 つの数値を入力する必要があります。これらの数値は add メソッドでパラメーター値として使用されます。私が理解していないのは、メソッドが呼び出されたときの最初の結果は何ですか? ただのヌルですか?そして、代わりに結果ではなく、0 または -1 を返したいのはなぜですか? 例えば:

double result;
returnValue = add(2.0, 5.0, &result); 

明らかに、結果として 7 が得られますが、結果を返さずにそれを出力するにはどうすればよいでしょうか? returnValue は 0 で、エラーがないことがわかっているので、結果を出力する必要があります。

4

3 に答える 3

7

Cには参照渡しがありません。ここでやっているように、ポインターを渡すことができますが、C には値渡ししかありません。

今あなたの実際の質問に:

私が理解していないのは、メソッドが呼び出されたときの最初の結果は何ですか? ただのヌルですか?

いいえ、関数が呼び出されるresult前の値は未定義です。宣言されている関数で値を代入するか、 のようなコードで を代入することにより、代入する前にの値を使用しようとしても、何の保証もaddありません。resultadd*result = d + dd

さらに言えば、 double は になることはありませんnull。Null は可能なポインタ値であり、可能な浮動小数点数ではありません。

そして、代わりに結果ではなく、0 または -1 を返したいのはなぜですか?

直接返す場合はresult、ある種の「計算に失敗しました」という明確な戻り値が必要になります。これは、ややこしく、呼び出し元が結果を使用する前に確認する必要があります。この方法により、呼び出し元はadd戻り値としてステータス コードがあることを認識し、呼び出し元がそれを無視したい場合は無視できます (ただし、ステータス コードは無視しないでください)。

明らかに、結果として 7 が得られますが、結果を返さずにそれを出力するにはどうすればよいでしょうか?

Ed Heal の提案は正しいprintf。ただし、Linux または Mac OS X を使用している場合は、ターミナルから実行することもお勧めしますman printf。多くの場合、Web ブラウザーを開くよりも便利です。

于 2012-09-08T02:16:02.083 に答える
2

あなたの誠実さに感謝します。爽やかです。

行は次のようになります

returnValue = add(2.0, 5.0, &result);

結果を出力するには、printfを参照してください。これで問題ありません。

于 2012-09-08T02:19:37.713 に答える
0

あなたが書いたコードは、変数が宣言されたときに結果に値を割り当てません。したがって、乱数が含まれています。この数値を使用して何かを行うのは明らかに悪いことです。プログラムが予測できない結果をもたらすからです。これは、未初期化変数エラーと呼ばれるものです。

あなたのコードは、割り当てられる前に変数を参照していないので、バグがあると言っているわけではありません。結果が割り当てられる前に、結果に何が含まれているかという質問に答えているだけです。特定の値が必要な場合は、次のように宣言できます。

double result = 7;

そして、常に何らかの事前定義された値を持っています。繰り返しますが、あなたの場合、これを行う必要はありません。常に定義された値が必要な場合は、できると言っているだけです。

于 2012-09-08T11:30:56.340 に答える