Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Id返回1退出状态错误_C_Recursion_Compiler Errors_Tail Recursion - Fatal编程技术网

C Id返回1退出状态错误

C Id返回1退出状态错误,c,recursion,compiler-errors,tail-recursion,C,Recursion,Compiler Errors,Tail Recursion,我一直试图找出这个错误将近一个小时,我有麻烦。我在读这篇文章:有人说可能是因为程序还在运行。我已经检查过了,但它没有运行,我仍然得到了错误 这是错误的样子:C:\Program\collect2.exe[error]ld返回了1个退出状态 我还看了一些有答案的帖子,比如这篇:上面的回答是这是一个“链接器错误”,程序被错误地编译了。我尝试创建一个新项目并复制代码,但最终还是出现了相同的错误。然后我进入了编译器选项,并截图显示了这些选项。这些选项看起来合适吗 也许这只是我忽略的代码中的一个错误。我

我一直试图找出这个错误将近一个小时,我有麻烦。我在读这篇文章:有人说可能是因为程序还在运行。我已经检查过了,但它没有运行,我仍然得到了错误

这是错误的样子:C:\Program\collect2.exe[error]ld返回了1个退出状态

我还看了一些有答案的帖子,比如这篇:上面的回答是这是一个“链接器错误”,程序被错误地编译了。我尝试创建一个新项目并复制代码,但最终还是出现了相同的错误。然后我进入了编译器选项,并截图显示了这些选项。这些选项看起来合适吗

也许这只是我忽略的代码中的一个错误。我必须创建一个尾部递归函数来添加数字。例如,用户输入4,函数加上4+3+2+1得到10

我相信错误在while循环中的这段代码中:

else{

        printf("Answer = %d \n", addNum(num));  
    }
当我把它注释出来时,我可以运行它,输入负数或零,然后得到输出。如果我的程序在函数中关闭,无法正确输出,我不希望您更正它。稍后我会调整这些东西,并为自己找出答案,我只是在寻找为什么我会出现这个错误

#include <stdio.h>
#include <stdlib.h>

int addNum(int n);
int main(int argc, char *argv[]) {

    int num;
    int count = 1;


    printf("Enter an integer greater than zero, (q to quit): \n");


    while(count < 3){

        printf("Enter a positive number: \n");
        scanf("%d", &num);

        if(num < 0){

            printf("Enter a positive number: \n");
        }
        else if(num == 0){

            printf("Answer = 0 \n");
        }
        else{

            printf("Answer = %d \n", addNum(num));  
        }


     }


    int addNum(int n){

       int answer; 

       if(n > 0){

          answer = n += addNum(n - 1);  
       }
       return answer;
    }

   return 0;
  }
#包括
#包括
intaddnum(intn);
int main(int argc,char*argv[]){
int-num;
整数计数=1;
printf(“输入一个大于零的整数,(q表示退出):\n”);
而(计数<3){
printf(“输入正数:\n”);
scanf(“%d”和&num);
if(num<0){
printf(“输入正数:\n”);
}
else if(num==0){
printf(“答案=0\n”);
}
否则{
printf(“答案=%d\n”,addNum(num));
}
}
intaddnum(intn){
int答案;
如果(n>0){
答案=n+=addNum(n-1);
}
返回答案;
}
返回0;
}

由于在
main
函数中定义的
addnum
导致出现此错误。默认情况下,C不支持嵌套函数。但是,gcc有一个扩展特性,允许嵌套函数。它们是非标准的,因此完全依赖于编译器


这里是
addNum
实现应该在
main()
之外的问题。这不是问题,但是你的
while
循环永远不会结束循环,如果你像WhozCraig所说的那样将addNum的定义移到main之外,它应该可以很好地编译。移动它是有效的,因为C不支持本地函数定义(即嵌套函数)。坦率地说,我很惊讶你的代码被编译了。如果你的编译器通过某种扩展来支持这一点(如果他们支持的话,他们对你没有好处),那么问题就变成了位置问题。标准C不支持它们。