2

このプログラムの出力に問題があります。入力を正しく受け付けていません。scanfとして機能するユーザー定義関数に関係している可能性があると思います

#include <stdio.h>
#include <math.h>
#define PI 3.14


int GetNum(void)
{
    return scanf("%d");
}

int CalculateAreaR(int length, int width)
{   
    return length*width;
}

double CalculateAreaC(int radius)
{
    return PI*radius*radius;
}

int main(void)
{
    int length;
    int width;
    int radius;
    int areaR;
    double areaC;

    printf( " Please enter the length of a rectangle  \n");
    length = GetNum();
    printf(" Please enter the width of a rectangle \n"); 
    width = GetNum();
    printf(" Please enter the radius of a circle \n");
    radius = GetNum();

    areaR = CalculateAreaR(length, width);

    printf("\nThe area of the rectangle is %d\n", areaR);

    printf("\nThe length is %d, the width is, %d and thus the area of the rectangle is %d\n\n", length, width, areaR);

    areaC = CalculateAreaC(radius);

    printf("\nThe area of the circle is %.3f\n", areaC);

    printf("\n\n The radius of the circle is %d and the area of the circle is %.3f\n\n", radius, areaC);

    return 0;
}
4

3 に答える 3

8

このようにプログラムを変更してみてください

int GetNum(void)
{ 
   int num;
   scanf("%d", &num);

   return num;

}

于 2013-02-09T03:16:08.517 に答える
2

scanf("%d");追加の引数が必要です。数値を格納する変数のアドレスを指定する必要があります。例:scanf("%d",&length);

于 2013-02-09T03:16:32.413 に答える
2

主な問題は、GetNum 関数がまったく値を返さないという事実です。

int GetNum(void)
{
  scanf("%d");
}

さらに、scanf の呼び出しで、スキャンした数値 (存在する場合) を格納するためのメモリの場所を指定するのを忘れました。

次のように変更します。

int GetNum (void) {
  int i;
  scanf ("%d", &i);
return i;
}

多かれ少なかれあなたの問題を解決するはずです。スキャンが成功したかどうかを確認するには、scanf の戻り値を確認することもできます。正常に解析されたアイテムの数 (この場合は 1) を返す必要があります。

ところで: 適切なコンパイラ スイッチを使用すると、あなたのようなバグを見つけやすくなります。

gcc を使用している場合、スイッチ -Wall を使用すると警告が表示されます: main.c:12: 警告: コントロールが非 void 関数の終わりに達する

于 2013-02-09T03:33:42.237 に答える