【问题标题】:C scanf int into structC scanf int 到 struct
【发布时间】:2014-07-21 14:54:25
【问题描述】:

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

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

/** 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 周围的空格,&a.x 等周围没有括号。

感谢您的关注,感谢您提供任何帮助。只是为了充分披露,这是针对我正在参加的 C 编程课程。

【问题讨论】:

    标签: c struct scanf


    【解决方案1】:

    你读了两次b.y

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

    最后一个应该是b.z,否则b.y 设置为6,然后被覆盖为2,而b.z 永远不会设置(并且恰好是0)。

    【讨论】:

    • 你知道我读了多少次这 4 行代码试图弄清楚发生了什么吗?啊!!!!好吧,希望这就是我本周的荷马辛普森行动的程度。大家星期一快乐!!!!
    • 每个人都会犯错你知道......一个小错误足以引起痛苦的头痛! :)
    • 在这种情况下调试的一个好主意是抽象出公共部分,例如创建一个读取 3 个整数并返回一个结构的函数,并单独测试该部分以及测试整体跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多