函数getInput有什么问题?

时间:2017-02-06 18:29:47

标签: c pointers codeblocks

未完成的程序,我不知道为什么,值不存储在权重,拖动和时间变量(内部结构USER_INPUT)中,如果我的printf权重,拖动和时间,它们都是0。 我还没有开始编写程序的其余部分,我是否在主函数中犯了一些错误?

#include  <stdio.h>

#define G 9.8
#define index 3

typedef struct
{
double weight;
double drag;
double time;
}USER_INPUT;

double velocities[index];

double getInput(USER_INPUT);
double calculateVelocities(USER_INPUT);

void main(void)
{
double velocity;
USER_INPUT input;

getInput(input);
calculateVelocities(input);



printf("Velocities for the parachuties with weight %f\n", input.weight);
printf("and a drag coefficient %f\n", input.drag);

printf("\n\n    Time     Velocities m/s\n");
printf("---------------------------------\n");
printf("        %f       %f\n", input.time, velocities[0]);
printf("        %f       %f\n", input.time, velocities[1]);
printf("        %f       %f\n", input.time, velocities[2]);




}

double getInput(USER_INPUT input)
{
printf("Please enter weight, drag and time:\n");
scanf("%lf %lf %lf", &input.weight, &input.drag, &input.time);

printf("%f  %f  %f\n"), input.weight, input.drag, input.time;
}

double calculateVelocities(USER_INPUT input)
{
velocities[0]=1;
velocities[1]=2;
velocities[2]=3;

}

1 个答案:

答案 0 :(得分:2)

这有几个不同的问题。

  1. 这是getInput下的拼写错误:

    printf("%f  %f  %f\n"), input.weight, input.drag, input.time;
    

    它应该是这样的:

    printf("%f  %f  %f\n", input.weight, input.drag, input.time);
    
  2. 您的函数getInputgetVelocities应该返回void而不是double。 改变这个:

    double getInput(USER_INPUT);
    double calculateVelocities(USER_INPUT);
    

    到这个

    void getInput(USER_INPUT);
    void calculateVelocities(USER_INPUT);
    

    然后为定义做同样的事情。

  3. 您通过而不是指针将USER_INPUT传递给您的函数。如果要设置struct的字段,则将其作为指针传递,然后在函数中取消引用一次。按值传递意味着接收对象的函数实际上只是将对象内容复制到新对象内容。因此,引用&input.width引用了复制对象上的width字段,而不是main函数中的原始字段。

    例如,您的getInput函数应为:

    // declaration
    void getInput(USER_INPUT*);
    
    // stuff
    
    // definition
    void getInput(USER_INPUT *input)
    {
      printf("Please enter weight, drag and time:\n");
      scanf("%lf %lf %lf", &((*input).weight), &((*input).drag), &((*input).time));
    
      printf("%f  %f  %f\n", input->weight, input->drag, input->time);
    }
    

    过分的括号应该完全清楚发生了什么。但您可以更简单地将&((*input).weight)写为&(input->weight)

    然后您必须使用calculateVelocities函数执行相同的操作。

    最后,要调用这些新定义的函数,请执行以下操作:

    getInput(&input);