2016-10-31 2 views
-2

벡터 구조체와 addVectorsubVector 함수를 만들었습니다. 인쇄 벡터 함수도 만들었습니다.C에서 구조체에 문제가있는

입력을위한 두 개, 출력을위한 두 개의 벡터 인스턴스를 생성해야합니다 (하나는 더하기와 하나는 빼기). addVector의 결과와 subVector의 결과를 인쇄하려면 printVector으로 전화해야합니다. 나는 그것의 대부분이 정확하다고 생각한다. 나는 무엇을해야할지 모르겠습니다.

#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"); 
}; 
+0

C 및 D를 선언 할 때 addVector 및 subVector를 각각 호출해야합니다. – bruceg

+1

'addVector'와'subVector' * 함수는 무언가를하기 위해 나타나지만 그 결과는 무시합니다. 함수에 의해'struct'는 리턴되지 않습니다. 또는 전달 된 목표 인수가 없습니다. –

+1

좋은 컴파일러가 코드 문제에 대해 경고했을 것입니다. – Barmar

답변

2

좌표 VECTOR의 값을 addVectorsubVector으로 계산하지만 VECTOR 구조는 반환하지 않습니다. 여기

이 그것을 할, 또한 VECTOR 인수가 수정되지 않기 때문에, 포인터가이 속성을 강조하는 const 자격이 있어야한다주의하는 방법이다 : 당신의 main 함수에서

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); 
} 

을, 당신은 벡터 A를 사용 그리고 B을 초기화하거나 사용자로부터 값을 읽으십시오. 코드이 방법을 수정

마지막으로
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 -W 또는 clang -Weverything을 사용하고 Visual Studio IDE를 사용하는 경우 경고 수준을 높이십시오.

+0

포인터로의 전달이 바람직 함을 여기에서 언급 할 가치가 있습니다. –

+0

@MM : 좋은 점, 업데이트 됨 – chqrlie

+0

도움 주셔서 감사합니다 방금 학교에서 코딩을 시작했습니다. –

0

addVectorsubVector 새로운 벡터의 구성 요소를 계산하지만, 실제로 새로운 벡터를 반환하지 않습니다

여기 내 코드입니다. 그런 다음 addVectorsubVector을 호출하고 반환 값을 무시하므로 일관성이 유지됩니다.

+1

실제로 일관성이 없으므로, 그는 벡터의 반환 값을 사용합니다. C = addVector (& A, &B); ' – Barmar

관련 문제