C编程计算矩形区域

时间:2014-03-16 09:46:17

标签: c area

我正在编写一个计算矩形区域的程序。

例如

  

输入左上角:1 1(用户输入)
  输入右下角:2 -1(用户输入)
  左上角x = 1.000000 y:1.000000
  右下角x = 2.000000 y:-1.000000
  面积= 2.000000(程序输出)

但我的是:

  

输入左上角:1 1(用户输入)
  输入右下角:2 -1(用户输入)
  w:1.000000
  h:2.000000
  w * h:2.000000
  矩形区域:1.000000 // 这是问题所在,它应该打印为 2.000000

typedef struct { 
    double x; 
    double y; 
} Point; 


typedef struct { 
    Point topLeft; /* top left point of rectangle */
    Point botRight; /* bottom right point of rectangle */
} Rectangle; 


Point p;
Rectangle r;


printf("Enter top left point : ");
scanf("%lf",&r.topLeft.x);
scanf("%lf",&r.topLeft.y);
fflush(stdin); 
printf("Enter bottom right point : ");
scanf("%lf",&r.botRight.x);
scanf("%lf",&r.botRight.y);
computeArea(&r);
printf("Rectangle Area : %lf",r);



double computeArea(Rectangle *r)
{ 
    double h=0,w=0,z=0;
    w=fabs(r->topLeft.x - r->botRight.x);
    printf("w : %lf\n",w);
    h=fabs(r->botRight.y - r->topLeft.y);
    printf("h : %lf\n",h);
    z=w*h;
    printf("w*h : %lf\n",z);
    return (z);
}

3 个答案:

答案 0 :(得分:2)

你不能打印矩形

Rectangle r;
// ...
printf("Rectangle Area : %lf",r); // <== you cannot print a Rectangle with printf

打开编译器警告

答案 1 :(得分:0)

变化:

computeArea(&r);
printf("Rectangle Area : %lf",r);

为:

printf("Rectangle Area : %lf", computeArea(&r));

正如其他人已经注意到的那样,yiu需要在computeArea之前添加main的原型(或将整个函数移到main之上),然后你应该启用编译器警告,然后了解并修复所有结果警告。

另请注意,您不应使用fflush(stdin) - 永远不要在输入流上调用fflush - 这会导致大多数系统上出现未定义的行为。

答案 2 :(得分:0)

由于没有人实际解释问题本身,问题是行computeArea(&r);

该函数将结果作为返回值,然后完全忽略。您可以将其存储在如下变量中:

double area = computeArea(&r);

然后你可以像这样打印双倍值:

printf("Rectangle Area : %f", area);

您也可以在参数列表中调用函数而不添加变量,如另一个答案中所示。点是,您需要捕获返回值。

注意:只使用%f同时使用double和float(使用printf或其他变量参数函数时会自动强制加倍)。有关详情,请参阅here