-3

重複の可能性:
値によって渡される元の変数の内容を変更するにはどうすればよいですか?

長方形の面積を計算する非常に単純なプログラムを作成しています。簡単ですが、お気づきのように、戻り値を取得できないようです。私は0を見続けます。おそらく明白な答えがあるか、あるいは私が理解できない何かがあるかもしれません。これが私のコードです:

#include<stdio.h>

//prototypes
int FindArea(int , int , int);

main()
{

//Area of a Rectangle

  int rBase,rHeight,rArea = 0;

  //get base
  printf("\n\n\tThis program will calculate the Area of a rectangle.");
  printf("\n\n\tFirst, enter a value of the base of a rectangle:");
  scanf(" %d" , &rBase);

  //refresh and get height
  system("cls");
  printf("\n\n\tNow please enter the height of the same rectangle:");
  scanf(" %d" , &rHeight);

  //refresh and show output
  system("cls");
  FindArea (rArea , rBase , rHeight);
  printf("\n\n\tThe area of this rectangle is %d" , rArea);
  getch();

}//end main

int FindArea (rArea , rBase , rHeight)
{
 rArea = (rBase * rHeight);

 return (rArea);

}//end FindArea
4

7 に答える 7

3

初期化rAreaして0にします。次に、FindArea で渡します。これはrArea、関数の変更が反映されていないことを意味します。戻り値も利用しません。したがって、rArea0のままです。

オプション1-戻り値を使用します。

int FindArea(int rBase, int rHeight) {
    return rBase * rHeight;
}

rArea = FindArea(rBase, rHeight);

オプション2-参照渡し:

void FindArea(int *rArea, int rBase, int rHeight) {
    *rArea = rBase * rHeight;
}

FindArea(&rArea, rBase, rHeight);
于 2012-10-02T23:09:56.257 に答える
1

戻り値を保存していないためです。コードは現在の形式ではコンパイルされません。

  1. それを次のように呼びます:

    rArea = (rBase , rHeight);
    
  2. 関数を次のように変更します。

    int FindArea (int rBase ,int rHeight)  
    {  
        return (rBase * rHeight);  
    }
    
  3. プロトタイプを次のように変更します。

    int FindArea(int , int);
    
于 2012-10-02T23:09:30.207 に答える
1

FindAreaの戻り値をに割り当てる必要がありますrArea。現時点では、製品を同じ名前ローカル変数にFindArea割り当てています。

mainまたは、のアドレスを渡しrAreaて変更することもできます。

FindArea(&rArea, rBase, rHeight);

main_

void FindArea(int * rArea, int rBase, int rHeight) {
    *rArea = rBase * rHeight;
}
于 2012-10-02T23:09:52.973 に答える
1
FindArea (rArea , rBase , rHeight);

あなたが思っているようには機能しません。Cでは、パラメーターは値によって渡されます。つまりarea、関数内で変更すると、そのローカルコピーのみが変更されます。関数の戻り値を変数に割り当てる必要があります。

int FindArea(int w, int h) { return w * h; }

int w, h, area;

// ...
area = findArea(w, h);
于 2012-10-02T23:10:31.390 に答える
0

これは、メインプログラムのrAreaに0以外の値を割り当てることは決してないためです。

于 2012-10-02T23:08:45.263 に答える
0

ポインタを取るrArea

int FindArea(int *, int , int);

...

FindArea (&rArea , rBase , rHeight);

...



int FindArea (int *rArea , int rBase , int rHeight)
{
 *rArea = (rBase * rHeight);

 return (*rArea);

}
于 2012-10-02T23:08:46.000 に答える
0

基本的な問題は、関数から値を取得する方法がわからないことです。関連する行を次のように変更します。

int FindArea(int rBase, int rHeight);  // prototype

int area = FindArea(rBase, rHeight);

int FindArea(int rBase, int rHeight)
{
     return rBase * rHeight;
}
于 2012-10-02T23:09:38.260 に答える