在C中遇到结构问题

时间:2016-10-31 18:53:10

标签: c pointers struct

我创建了一个矢量结构和一个addVectorsubVector函数。我还创建了一个打印矢量功能。

我需要创建4个矢量实例:两个用于输入,两个用于输出(一个用于加法,一个用于减法)。我需要致电printVector打印addVector的结果和subVector的结果。我认为大部分都是正确的。我只是不确定该怎么做。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    double x;
    double y;
    double z;
} VECTOR;

VECTOR addVector(VECTOR *addOne, VECTOR *addTwo) {
    double addX = addOne->x + addTwo->x;
    double addY = addOne->y + addTwo->y;
    double addZ = addOne->z + addTwo->z;
};

VECTOR subVector(VECTOR *subOne, VECTOR *subTwo){
    double subX = subOne->x - subTwo->x;
    double subY = subOne->y - subTwo->y;
    double subZ = subOne->z - subTwo->z;
};

void printVector(VECTOR *printVector) {
    printf("%lf, %lf, %lf\n", printVector->x, printVector->y, printVector->z);
};

void main() {
    VECTOR A;
    VECTOR B;
    VECTOR C = addVector(&A, &B);      
    VECTOR D = subVector(&A, &B);

    printf("Enter three doubles.\n");
    scanf_s("%lf %lf %lf", &A.x, &A.y, &A.z);

    addVector(&A, &B);

    printVector(&C);

    subVector(&A, &B);
    printVector(&D);

    system("pause");
};

2 个答案:

答案 0 :(得分:2)

您计算VECTORaddVectorsubVector坐标的值,但不返回VECTOR结构。

以下是如何操作,并注意由于VECTOR参数未被修改,因此指针应该const有资格强调此属性:

VECTOR addVector(const VECTOR *addOne, const VECTOR *addTwo) {
    VECTOR add;
    add.x = addOne->x + addTwo->x;
    add.y = addOne->y + addTwo->y;
    add.z = addOne->z + addTwo->z;
    return add;
}

VECTOR subVector(const VECTOR *subOne, const VECTOR *subTwo) {
    VECTOR sub;
    sub.x = subOne->x - subTwo->x;
    sub.y = subOne->y - subTwo->y;
    sub.z = subOne->z - subTwo->z;
    return sub;
}

void printVector(const VECTOR *printVector) {
    printf("%lf, %lf, %lf\n", printVector->x, printVector->y, printVector->z);
}

main功能中,您可以在初始化或从用户读取值之前使用向量AB。以这种方式修改代码:

void main() {
    VECTOR A = { 0, 0, 0 };
    VECTOR B = { 0, 0, 0 };
    VECTOR C, D;

    printf("Enter three doubles for A\n");
    scanf_s("%lf %lf %lf", &A.x, &A.y, &A.z);

    printf("Enter three doubles for B\n");
    scanf_s("%lf %lf %lf", &B.x, &B.y, &B.z);

    C = addVector(&A, &B);
    printVector(&C);

    D = subVector(&A, &B);
    printVector(&D);

    system("pause");
}

最后,不要在你的职能部门之后加上;

另请注意,您应该启用所有编译器警告,因为它可以帮助避免上述的愚蠢错误。对命令行编译器使用gcc -Wall -Wclang -Weverything,如果使用,则增加Visual Studio IDE中的警告级别。

答案 1 :(得分:0)

addVectorsubVector计算新向量的组件,但实际上并不返回新向量。但是,你调用addVectorsubVector并忽略返回值,所以至少你是一致的。