C 如何在函数中计算答案,然后从main()函数打印答案?

C 如何在函数中计算答案,然后从main()函数打印答案?,c,C,我正在尝试创建一个程序,它将根据一组预设的数字计算一个数字。我已经设法做到了,但是,我需要在main()函数中显示答案的printf部分,而不是在进行计算的函数中,我不太确定如何做到这一点 我试着把printf移到main下面,但是它说变量没有定义。我还尝试在方程计算完成后放置main(),但这也不起作用 下面的代码做了我希望它做的事情,除了print if位于等式函数中,而不是主函数中,这是我不太确定如何做的 我的代码: #include <stdio.h> vo

我正在尝试创建一个程序,它将根据一组预设的数字计算一个数字。我已经设法做到了,但是,我需要在main()函数中显示答案的printf部分,而不是在进行计算的函数中,我不太确定如何做到这一点

我试着把printf移到main下面,但是它说变量没有定义。我还尝试在方程计算完成后放置main(),但这也不起作用

下面的代码做了我希望它做的事情,除了print if位于等式函数中,而不是主函数中,这是我不太确定如何做的

我的代码:

    #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(&param);

    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;
}