包含'double'数组的struct中的Scanf不起作用?

时间:2017-01-22 16:10:00

标签: c arrays struct

所以我必须使用结构和scanf编写标量产品((x1 * y1)+(x2 * y2))。 然而,我的程序只是跳过y1并将y1和x2都计为相同的数字,即使我键入完全不同的数字? 我做了以下事情:

 struct _point2d
    {
       double x[1];  // this means x1 is x[0] and x2 is x[1]
       double y[1];
    };

double PscalarProduct( double a, double b, double c, double d )
{
    printf("The scalar product ((x1*y1) + (x2*y2)) (whereas x1 = %lf, 
y1 = %lf, x2 = %lf, y2 = %lf) is %lf\n", a, b, c, d, (( a*b ) + ( c*d )) );
    }


int main()
{   
    struct _point2d Vector;
    Vector.x[1];
    Vector.y[1];

printf("Enter x1 and y1 \n"); 
    scanf("%lf", &(Vector.x[0]));
    scanf("%lf", &(Vector.y[0]));
printf("Enter x2 and y2 \n");
    scanf("%lf", &(Vector.x[1]));
    scanf("%lf", &(Vector.y[1]));
PscalarProduct(Vector.x[0], Vector.y[0], Vector.x[1], Vector.y[1]);


 return 0;
    }

但是,如果我使用数字1 [= x1] 2 [= y1] 3 [= x2] 4 [= y2]运行程序,我会收到以下文字:

The scalar product ((x1*y1) + (x2*y2)) (whereas x1 = 1.000000, y1 = 3.000000, x2 = 3.000000, y2 = 4.000000) is 15.000000

这怎么可能是y1和x2是相同的数字??? y1应该是数字2.00000。

1 个答案:

答案 0 :(得分:3)

结构成员xy数组每个只能包含一个元素。但是你正在阅读2个元素作为输入。

在C中,数组索引范围从0N-1。由于越界访问,您的代码具有未定义的行为

增加数组大小:

 struct _point2d
    {
       double x[2]
       double y[2];
    };