C 如何在函数中计算答案,然后从main()函数打印答案?
我正在尝试创建一个程序,它将根据一组预设的数字计算一个数字。我已经设法做到了,但是,我需要在main()函数中显示答案的printf部分,而不是在进行计算的函数中,我不太确定如何做到这一点 我试着把printf移到main下面,但是它说变量没有定义。我还尝试在方程计算完成后放置main(),但这也不起作用 下面的代码做了我希望它做的事情,除了print if位于等式函数中,而不是主函数中,这是我不太确定如何做的 我的代码:C 如何在函数中计算答案,然后从main()函数打印答案?,c,C,我正在尝试创建一个程序,它将根据一组预设的数字计算一个数字。我已经设法做到了,但是,我需要在main()函数中显示答案的printf部分,而不是在进行计算的函数中,我不太确定如何做到这一点 我试着把printf移到main下面,但是它说变量没有定义。我还尝试在方程计算完成后放置main(),但这也不起作用 下面的代码做了我希望它做的事情,除了print if位于等式函数中,而不是主函数中,这是我不太确定如何做的 我的代码: #include <stdio.h> vo
#include <stdio.h>
void equation(double Rstar, double fp, int ne, double f1, double
fi, double fc, int L)
{
int N = Rstar * fp * ne * f1 * fi * fc * L;
printf("N=%d, Rstar=%.1f, fp=%.1f, ne=%d, f1=%.1f, fi=%.1f, fc=%.1f, L=%d",N,Rstar,fp,ne,f1,fi,fc,L);
}
int main(int argc, char **argv)
{
equation(1.0,0.2,1,1.0,1.0,0.1,1000);
return 0;
}
#包括
孔隙方程(双Rstar,双fp,int-ne,双f1,双
fi、双fc、int L)
{
int N=Rstar*fp*ne*f1*fi*fc*L;
printf(“N=%d,Rstar=%.1f,fp=%.1f,ne=%d,f1=%.1f,fi=%.1f,fc=%.1f,L=%d”,N,Rstar,fp,ne,f1,fi,fc,L”);
}
int main(int argc,字符**argv)
{
方程(1.0,0.2,1,1.0,1.0,0.11000);
返回0;
}
您应该让函数返回如下结果:
int equation(double Rstar, double fp, int ne, double f1, double
fi, double fc, int L)
{
int N = Rstar * fp * ne * f1 * fi * fc * L;
return N;
}
int main(int argc, char **argv)
{
int N = equation(1.0,0.2,1,1.0,1.0,0.1,1000);
printf("N: %d\n", N);
return 0;
}
请注意,函数返回类型已从void更改为int。您可以将
equation()
函数声明为int
类型,并返回N。main()
然后可以说X=equation…
和printf()
从那里开始。使函数返回计算结果,并在main中优先返回返回值:
#include <stdio.h>
int equation(double Rstar, double fp, int ne, double f1, double
fi, double fc, int L)
{
int N = Rstar * fp * ne * f1 * fi * fc * L;
return N;
}
int main(int argc, char **argv)
{
int N = equation(1.0,0.2,1,1.0,1.0,0.1,1000);
printf("N=%d, Rstar=1.0, fp=0.2, ne=1, f1=1.0, fi=1.0, fc=0.1, L=1000",N);
return 0;
}
函数可以返回值。旁白:为什么当乘法的结果是双倍的时,为什么要返回N呢?@WeatherVane我的指令是将N作为一个非负整数返回,所以我只是按照下面的说明along@xKetjow假设产品超出int
的范围?如果要求它是非负的,unsigned int
的值会比int
好吗?既然你说“整数”会更好吗?…因为这是你能从double
中得到的最大非负整数范围。有可能返回所有变量而不仅仅是N,那么返回N,Rstar,fp,ne,f1,fi,fc,L?我刚刚尝试过,但没有成功,但我可能做错了什么。可以“返回”多个值。我使用引号的原因是,您可以通过函数参数中的指针找到引号。但这可能超出了讨论的范围。@xKetjow既然您已经知道传递的变量是什么,为什么要返回所有这些变量,因为您已经将它们传递给了函数?@WeatherVane是正确的,您不需要返回传入的值,除非您计划在函数中修改它们,但目前情况似乎并非如此。我将再次运行同一个方程3次,但每次运行时,所有变量的值都不同,但我认为这应该是可行的。我可能会使用它,但我还没有在课堂上看过它,而且,我已经将返回N;位,然后在printf附近改变,它告诉我N是未声明的variable@xKetjow你从哪里得到这样的错误?在哪一行?在这里,它工作得很好:在这里,这是您发布的第一个示例。编辑:别担心,我忘了在main()的开头添加一些内容@xKetjow看起来您没有正确复制main()
函数。请重新复制粘贴
#include <stdio.h>
typedef struct equ_input_t
{
double rStart;
double fp;
int ne;
double f1;
double fi;
double fc;
int L;
} equ_input_t;
int equation(const equ_input_t *input)
{
int N = input->rStart * input->fp * input->ne * input->f1 * input->fi * input->fc * input->L;
return N;
}
int main(int argc, char **argv)
{
equ_input_t param = {.rStart = 1.0,
.fp = 0.2,
.ne = 1,
.f1 = 1.0,
.fi = 1.0,
.fc = 0.1,
.L = 1000 };
int N = equation(¶m);
printf("N=%d, Rstar=%.1f, fp=%.1f, ne=%d, f1=%.1f, fi=%.1f, fc=%.1f, L=%d",
N, param.rStart, param.fp, param.ne, param.f1, param.fi, param.fc, param.L);
return 0;
}