未完成的程序,我不知道为什么,值不存储在权重,拖动和时间变量(内部结构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;
}
答案 0 :(得分:2)
这有几个不同的问题。
这是getInput
下的拼写错误:
printf("%f %f %f\n"), input.weight, input.drag, input.time;
它应该是这样的:
printf("%f %f %f\n", input.weight, input.drag, input.time);
您的函数getInput
和getVelocities
应该返回void
而不是double
。
改变这个:
double getInput(USER_INPUT);
double calculateVelocities(USER_INPUT);
到这个
void getInput(USER_INPUT);
void calculateVelocities(USER_INPUT);
然后为定义做同样的事情。
您通过值而不是指针将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);