在main之外定义一个函数

时间:2016-03-11 12:55:41

标签: c

#include <stdio.h>
#include <math.h>

main()
{
     float i;
     float x,N,sum;
     printf("enter x and N respectively");
     scanf ("%f %f", &x, &N);

     sum = 0;
     for (i=1;i<=N;i++){
          sum = sum + ((pow(x,i))/(fact(i)));
     }
     printf ("%f", sum);
}

int fact(int n){
     int i,temp;
     temp = 1;
     for (i=1;i<=n;i++){
          temp = temp*i;
          return temp;
     }

}

这是相应地打印条款的总和。我尝试在main中定义事实,但是有一些控制流警告,我这次尝试了同样的事情,但错误的答案。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

您需要在int fact(int n);函数之前添加main()以告诉编译器存在名为fact的函数,或者您可以在之前添加整个函数定义。

答案 1 :(得分:1)

你不能(你被C99或C11标准禁止)在另一个内部定义一个函数(如fact)(如main)。

但是,某些C编译器,特别是GCC接受作为扩展名才能拥有nested functions

(我建议不要使用该扩展名,特别是如果你是C的新手)

当然你最好宣布

int fact(int n);
main之前

并在之后保留定义

您的代码错误(特别是 define main更好int main(int argc, char**argv)然后了解getopt并使用它。用所有警告编译它&amp;调试信息(例如gcc -Wall -Wextra -g homework.c -o binaryprog ...)然后使用调试器(例如gdb ./binaryprog

答案 2 :(得分:0)

您必须在main之上声明fact()。有两种方法可以做到。

第一种方式:在main()

之上添加int fact(int n);

第二种方式:将整个函数复制到main()之上。所以它看起来像:

#include <stdio.h>
#include <math.h>

int fact(int n)
{
    int i,temp;
    temp = 1;
    for (i=1;i<=n;i++){
        temp = temp*i;
        return temp;
    }
}

main()
{
    float i;
    float x,N,sum;
    printf("enter x and N respectively");
    scanf ("%f %f", &x, &N);

    sum = 0;
    for (i=1;i<=N;i++){
        sum = sum + ((pow(x,i))/(fact(i)));
    }
    printf ("%f", sum);
}