我正在尝试编写两个函数,一个接受输入,另一个计算加速度。编译器告诉我我的变量是未初始化的,但它们应该有来自输入的值。我做错了什么。
#include <stdio.h>
#include <stdlib.h>
void input_instructions(double vi, double vf);
double compute_acceleration(double vi, double vf);
int main()
{
double vi;
double vf;
double acc;
double t;
input_instructions(vi, vf);
acc = compute_acceleration(vi,vf);
t = (vf - vi)/acc;
printf("The constant acceleration of the cyclist is %.2f and it will take him %.2f minutes/seconds/"
"to come to rest with an initial velocity of 10mi/hr.\n", acc, t);
}
void input_instructions(double vi, double vf)
{
printf("This program will calculate the rate of accleration and the time it takes/"
"the cyclist to come to rest\n");
printf("Enter inital velocity=>");
scanf("%lf", &vi);
printf("Enter final velocity");
scanf("%lf", &vf);
}
double compute_acceleration(double vi, double vf)
{
double t = 1;
double a = (vf-vi)/t;
return (a);
}
答案 0 :(得分:3)
void input_instructions(double vi, double vf)
{
printf("Enter inital velocity=>");
scanf("%lf", &vi);
printf("Enter final velocity");
scanf("%lf", &vf);
// function returns and input parameter values are gone.
}
您希望将指针传递给变量,如下所示:
void input_instructions(double *vi, double *vf)
{
printf("This program will calculate the rate of accleration and the time it takes/"
"the cyclist to come to rest\n");
printf("Enter inital velocity=>");
scanf("%lf", vi);
printf("Enter final velocity");
scanf("%lf", vf);
并从main()调用如下:
input_instructions(&vi, &vf);
请参阅examples。
答案 1 :(得分:1)
您正在读取input_instructions函数中的变量,因此无法传入&#34;&#34;传入&#34;。而且由于它们的内存在函数内部被旋转,因此它们无法在其外部访问。
一个选项是将变量vi和vf更改为全局变量,方法是在main之外声明它们,不要在input_functions的签名中使用它们,其余的可能没问题。
#include <stdio.h>
#include <stdlib.h>
/* Prototypes */
void input_instructions();
double compute_acceleration(double new_vi, double new_vf);
/* Globals */
double vi;
double vf;
int main()
{
在这种情况下,由于您正在传递全局变量,因此您甚至不一定需要接受compute_acceleration函数上的参数。我通常不会推荐全局变量,但这似乎是你正在处理的问题中最少的。
另一种选择是将main中的变量vi和vf初始化为0,然后通过引用将它们传递给input_instructions,以便函数可以更改它们的值。
例如:
void input_instructions(double *i, double *f);
double compute_acceleration(double x, double y);
int main()
{
double vi = 0;
double vf = 0;
double acc = 0;
double t = 0;
input_instructions(&vi, &vf);
acc = compute_acceleration(vi,vf);
我更改了变量的名称,以帮助理解变量的内存位置存在的位置,并显示在示例中,main中的vi实际上是与被调用方法中的vi不同的变量。
答案 2 :(得分:0)
将vi,vf,acc和t声明为全局变量(在main之外)。
#include <stdio.h>
#include <stdlib.h>
void input_instructions();
double compute_acceleration();
double vi;
double vf;
double acc;
double t;
int main()
{
input_instructions();
acc = compute_acceleration();
t = (vf - vi)/acc;
printf("The constant acceleration of the cyclist is %.2f and it will take him %.2f minutes/seconds/"
"to come to rest with an initial velocity of 10mi/hr.\n", acc, t);
}
void input_instructions()
{
printf("This program will calculate the rate of accleration and the time it takes/"
"the cyclist to come to rest\n");
printf("Enter inital velocity=>");
scanf("%lf", &vi);
printf("Enter final velocity");
scanf("%lf", &vf);
}
double compute_acceleration()
{
double t = 1;
double a = (vf-vi)/t;
return (a);
}
或者你可以使用指针并将它们传递给'input_instructions'函数。
答案 3 :(得分:0)
在
void input_instructions(double vi, double vf)
{
.
.
}
变量vi
是vf
是函数的局部变量,并且与main()
函数中类似命名的变量无关。换句话说,它们有function-scope
,并且在函数返回后它们不再存在。
你应该做的是:
input_instructions(&vi,&vf); // pass the address in the main()
并将函数重写为:
void input_instructions(double *vi, double *vf) // Using pointers
{
printf("This program will calculate the rate of accleration and the time it takes/"
"the cyclist to come to rest\n");
printf("Enter inital velocity=>");
scanf("%lf", vi); // Hmm, you're changing the value in the main()
printf("Enter final velocity");
scanf("%lf", vf); // Note no '&' since we're dealing with pointers.
}
此处使用函数的正式参数main()
和vf
对vi
*vf
和*vi
进行持久更改{ {1}}。