Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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 在我的代码中,它正在读取无限元素,为什么?_C - Fatal编程技术网

C 在我的代码中,它正在读取无限元素,为什么?

C 在我的代码中,它正在读取无限元素,为什么?,c,C,/*c程序,用于查找元素相加为0的最大子数组 它不停地读着,我不知道为什么?例如,如果我提供输入 作为4个元素的数量,它必须为某些元素取4个元素 对于像12-34这样的人来说,工作正常吗 即使服用了4种元素,也要服用5种元素*/ #include <stdio.h> #include<stdlib.h> void popout (int a[100], int q, int n,int j) { int z; z=n;

/*c程序,用于查找元素相加为0的最大子数组 它不停地读着,我不知道为什么?例如,如果我提供输入 作为4个元素的数量,它必须为某些元素取4个元素 对于像12-34这样的人来说,工作正常吗 即使服用了4种元素,也要服用5种元素*/

    #include <stdio.h>
    #include<stdlib.h>
    void popout (int a[100], int q, int n,int j) 
    {
        int z; z=n;
        for (int o = q; o < n - 1; o++)
        {
            a[o] = a[o + 1];  //deletes one number
        } 
        int g = j;
        if(g!= 1)
        {
            z--;   //function calls recursively till we are 
                   // deleting only one number 
            for(int i=0;i<n;i++) {     
                popout(a,a[i],z,g-1); // after deleting one number again 
                                      //again runs a loop to delete other 
                                      //number from already deleted array
            }
            g--;
        }
    } 
        
        
        
    int main () 
    {
        int n;int f;
        int a[100];
        int b[100];
        printf ("enter number of elemnts");
        scanf ("%d",&n);
        printf ("enter elements");
        for (int i = 0; i < n; i++)
            scanf ("%d", &a[i]);
        for (int i = 0; i < n; i++)
            b[i] = a[i];
        for (int j = 1; j < n; j++)
            a[0] = a[0] + a[j];
        if (a[0] == 0)
            printf ("%d", n);
        for (int i = 0; i < n; i++)
            a[i] = b[i];
        /* pop out number by number */ 
        for(int p = 1;p < n; p++) {  //p:number of elements to be deleted at onece
            for(int i=0;i<n;i++) {  
                popout(a,a[i],n,p);
                for(int g=1;g<n-1;g++) {
                    a[0]+=a[g];
                }
                if(a[0]==0)
                {
                    printf("%d",n-p); exit(0);
                }
                else {
                    for(int i=0;i<n;i++)
                    a[i]=b[i];
                }
            }
        }
        return 0;    
    }
#包括
#包括
无效弹出(int a[100],int q,int n,int j)
{
intz;z=n;
对于(into=q;o对于(int i=0;i请编辑您的问题,以正确缩进代码。缩进对于可读性很重要。注意:如果您的问题在到达
for
循环之前发生,则循环和当时未执行的所有代码与问题无关。当举一个最简单的示例cre时,应删除不相关的代码ated.
exit
不执行任何操作,您需要
exit(/*exit\u code*/)
@anastaciu即使该操作不起作用,我也编写了exit(0);而不是退出;但没有用…@srujithchaitanya我没料到,这只是一个旁白,这就是为什么它是一个注释而不是答案,记住。在没有检查返回值的情况下,你永远不应该使用
scanf
或其他I/O函数。你确定,
n
正确读入了吗?