C将int扫描到结构中

C将int扫描到结构中,c,struct,scanf,C,Struct,Scanf,我正在尝试将一些整数读入结构。我让用户输入两个三维向量并返回两个叉积和点积 它似乎正在跳过第二个向量的第二个值。以下是我目前的代码: /** 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-dimensio

我正在尝试将一些整数读入结构。我让用户输入两个三维向量并返回两个叉积和点积

它似乎正在跳过第二个向量的第二个值。以下是我目前的代码:

/** 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);

}
/**编写一个程序来计算
**三维向量:
**  
**    1. 使用类型定义
**    2. 接受用户输入的数量(2)三维向量
**    3. 计算A×B和B×A的叉积
**    4. 计算点积A*B
**
******************************************************************/
/*************预处理器功能**********************/
#包括
#包括
/************结构化数据类型***************************/
typedef结构向量
{
int x;
int-y;
intz;
}载体;
/*************声明用户函数**********************/
int dot_积(向量a,向量b);
向量叉积(向量a,向量b);
/************开始主循环*************************/
内部主(空)
{
/**声明变量**/
向量a,b,c;
printf(“输入第一个向量的3个整数分量:”);
scanf(“%d%d%d”,&(a.x),&(a.y),&(a.z));
printf(“输入第二个向量的3个整数分量:”);
scanf(“%d%d%d”,&(b.x),&(b.y),&(b.y));
c=叉积(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=叉积(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,点积(a,b));
/***********切!这是一个包裹伙计们!拿5块!************/
返回0;
}
/**********执行计算的用户函数****/
整数点积(向量a,向量b)
{
返回((a.x*b.x)+(a.y*b.y)+(a.z*b.z));
}
向量叉积(向量a,向量b)
{
载体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);
返回(c);
}
如果用户输入:3 2 1 然后进入:5 6 2

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

我在scanf中尝试过在%d周围使用空格,在&a.x等周围没有括号


感谢您的关注,并感谢您的帮助。这是我参加的一个C编程课程,仅供全面披露

你读了两遍
b.y

scanf(“%d%d%d”,&(b.x),&(b.y),&(b.y))


最后一个应该是
b.z
,否则
b.y
被设置为
6
,然后被覆盖到
2
,而
b.z
从来没有设置过(碰巧是
0
)。

你知道我读了多少遍这4行代码,试图弄清楚发生了什么吗?DOH!!!!好吧,希望这就是我本周荷马·辛普森的行动范围。大家星期一快乐!!!!每个人都会犯错误,你知道的……一个小小的错误就足以引起头痛!!:)在这种情况下进行调试的一个好主意是抽象出公共部分,例如创建一个读取3个int并返回一个struct的函数,并单独测试该部分以及测试整个部分