プロが教える店舗&オフィスのセキュリティ対策術

私は現在c言語初心者ですが関数を使い円柱の体積を求めてるのですが
なぜかエラーだらけです。どなたか何故エラーが起きるのか教えていただけませんか?
#include<stdio.h>

int taiseki(int *volu);

int main()
{
int volu=0;
taiseki(int &volu);

printf("%d",volu);
}

int taiseki(int *volu)
{
int i = 2;
int c = 3;
int t = 6;


int a = 2*i*c*c/4;
int b =i*c*t;

volu=a/b;

return volu;
}
こんなかんじですがいかがでしょう?

A 回答 (3件)

そもそも、円柱の体積を求める式はそれで正しいのでしょうか?


円周率の値(約3.14)がどこにも登場していませんね。
ゆとり教育世代なので3を使っている、ということでしょうか。

また、底面の半径や円柱の高さ、という重要な変数の名前が
iとかcとかtとかいうのは、ちょっといただけません。
「名は体を表わす」よう、半径や高さであることが
一目見てわかるような名前を付けることを強くお勧めします。
    • good
    • 0
この回答へのお礼

ありがとうございます。
たしかに誰が見てもわかりやすい方が良いですよね。
関数とポインタの使い方がいまいちわからなかったので。
そこまで気が回らず、自分だけの理解で終わっていました。
以後だれからも見やすくというのを意識したいと思います。

お礼日時:2009/11/09 18:37

いろいろあるのですが、



(1)main関数の戻り値を返していません。
(2)taiseki関数の戻り値を使用していない→戻り値なし(void)
(3)小数はint型で表現できません→double型を使用
(4)既にvolu変数を宣言しているのに、再宣言していた
(5)ポインタ変数に代入するときは、*をつける。

========================================
#include<stdio.h>

void taiseki(double *volu); //(2)(3)

int main(){
  double volu = 0; //(3)
  taiseki(&volu); //(4)

  printf("%f",volu);
  return 0; //(1)
}

void taiseki(double *volu){ //(2)(3)
  int i = 2;
  int c = 3;
  int t = 6;

  double a = 2*i*c*c/4; //(3)
  int b = i*c*t;

  *volu = a/b; //(5)

  //return volu; //(2)
}
========================================
こんな感じでしょうか
    • good
    • 0
この回答へのお礼

ありがとうございます的確なご指摘。

もう一度組みなおします。

お礼日時:2009/11/09 14:30

ちょっと割愛しますが



int taiseki(int *volu)
{
return volu;
}

このような場合、関数taiseki()の戻り値としてvoluを返します。
例を2パターン書いてみたので試してみて

1)
void taiseki(int *volu);

int main()
{
int volu=0;
taiseki(int &volu);

printf("%d",volu);
}

void taiseki(int *volu)
{
int i = 2;
int c = 3;
int t = 6;


int a = 2*i*c*c/4;
int b =i*c*t;

*volu=a/b;

return;
}

2)
int taiseki(void);

int main()
{
int volu=0;
volu = taiseki();

printf("%d",volu);
}

void taiseki(int *volu)
{
int i = 2;
int c = 3;
int t = 6;


int a = 2*i*c*c/4;
int b =i*c*t;

volu=a/b;

return volu;
}
    • good
    • 0
この回答へのお礼

ありがとうございます。

早速試してみましたが、二つともエラーが起きてしまいます。

どこでエラーしているのかさっぱりわかりません。

引数の問題や間接参照レベルがちがうらしいのですが。。。。。

お礼日時:2009/11/09 13:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!