2014-07-21 46 views
0

我想读取一些整数到一个结构。我让用户输入两个三维向量并返回两个交叉产品和点积。C scanf int结构

它似乎是跳过第二个向量的第二个值。这是我的代码到目前为止:

/** Write a program to calculate cross-products and dot products of 
** a 3-dimensional vector: 
** 
** 1. Uses a type definition 
** 2. Accepts User input of qty(2) 3-dimensional vectors 
** 3. Calculate the cross-product of A x B and B x A       
** 4. Calculate the dot product A * B 
** 
******************************************************************/ 


/************* Preprocessor Functions  **********************/ 
#include <stdio.h> 
#include <stdlib.h> 


/************ Structured Data Types ***************************/ 

typedef struct vector 
{ 
    int x; 
    int y; 
    int z; 
} Vector; 


/************* Declare User Functions **********************/ 

int dot_product(Vector a, Vector b); 
Vector cross_product(Vector a, Vector b); 

/************  Begin MAIN LOOP  *************************/ 

int main(void) 
{ 
/**  Declare variables  **/ 
    Vector a, b, c; 

    printf("Enter the 3 integer components of the first vector: "); 
    scanf("%d%d%d", &(a.x), &(a.y), &(a.z)); 
    printf("Enter the 3 integer components of the second vector: "); 
    scanf("%d%d%d", &(b.x), &(b.y), &(b.y)); 
    c = cross_product(a, b); 
    printf("\n\t(%d %d %d) x (%d %d %d) = (%d %d %d)", a.x,a.y,a.z,b.x,b.y,b.z,c.x,c.y,c.z); 
    c = cross_product(b, a); 
    printf("\n\t(%d %d %d) x (%d %d %d) = (%d %d %d)", b.x,b.y,b.z,a.x,a.y,a.z,c.x,c.y,c.z); 
    printf("\n\t(%d %d %d) * (%d %d %d) = %d\n", a.x,a.y,a.z,b.x, b.y,b.z,dot_product(a, b)); 

/*********** AND CUT! It's a wrap folks! Take 5!  ***********/  
    return 0; 
} 

/********** User Functions to perform the calculations ****/ 

int dot_product(Vector a, Vector b) 
{ 
    return((a.x*b.x)+(a.y*b.y)+(a.z*b.z)); 
} 

Vector cross_product(Vector a, Vector b) 
{ 
Vector c; 
c.x = (a.y*b.z)-(a.z*b.y); 
c.y = (a.z*b.x)-(a.x*b.z); 
c.z = (a.x*b.y)-(a.y*b.x); 

return(c); 

} 

如果用户输入:3 2 1 ,然后进入:5 6 2

使用的两个向量:[3 2 1]和[5 2 0]

我试图在scanf%d个左右的空间,和周围&斧等

由于没有括号的前瞻性和任何帮助表示赞赏。只是为了全面披露,这是针对我参加的C编程课程。

回答

2

你读入b.y两次:

scanf("%d%d%d", &(b.x), &(b.y), &(b.y));

最后一个应该是b.z,否则b.y设置为6,然后被覆盖到2,而b.z从未设置(与发生是0)。

+0

你知道我通过这4行代码试图弄清楚发生了什么吗? DOH !!!!那么,希望这是我的荷马辛普森一周的动作范围。快乐的星期一每个人! –

+0

每个人都会犯你认识的错误...一个小小的错误就足以导致痛苦的头痛! :) –