Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.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
Arrays 由于定义了指针,数组为非法索引获取输入_Arrays_C_Function_Pointers_Return Type - Fatal编程技术网

Arrays 由于定义了指针,数组为非法索引获取输入

Arrays 由于定义了指针,数组为非法索引获取输入,arrays,c,function,pointers,return-type,Arrays,C,Function,Pointers,Return Type,在下面的代码中,在main函数中,如果我删除“p=createHeap(n,a)”,那么它将正常地接受输入,直到定义为n为止。但若不删除它,那个么数组输入(for循环)将继续不断地获取输入(无限循环)。不知道原因 #include<stdio.h> int * createHeap(int n, int *b); void insert(); void delete(); int main() { int n,i,j; int *p; printf(&qu

在下面的代码中,在main函数中,如果我删除“p=createHeap(n,a)”,那么它将正常地接受输入,直到定义为n为止。但若不删除它,那个么数组输入(for循环)将继续不断地获取输入(无限循环)。不知道原因

#include<stdio.h>

int * createHeap(int n, int *b);
void insert();
void delete();

int main() {
    int n,i,j;
    int *p;
    printf("Enter the size of array : ");
    scanf("%d",&n);
    
    int a[n];
    printf("\nEnter the elements of array: %d",n);
    
    for(i=0;i<n;i++) {
        scanf("%d",&a[i]);
    }
    printf("out");
    p = createHeap(n,a);                       // Problem in this line.
                                               //If removed then array will take input upto n
                                               // if not then input loop will be infinite.
    printf("\nsuccess");

return 0;

}

int * createHeap(int n, int *b) {
    int i,j,k;
    
    for(i=1;i<n;i++) {

        j=(i+1)/2 - 1;                                      //parent node
        k=i;
        while(j>=0) {
            if(b[k] > b[j])
                {
                    b[i] = b[i]+b[j];                       //swap
                    b[j] = b[i]-b[j];
                    b[i] = b[i]-b[j];
                }
            k=j;
            j=(i+1)/2 - 1;                                  //tracking parent node
        }       
    }
    
    return b;

}
#包括
int*createHeap(int n,int*b);
无效插入();
作废删除();
int main(){
int n,i,j;
int*p;
printf(“输入数组的大小:”);
scanf(“%d”和“&n”);
int a[n];
printf(“\n输入数组的元素:%d”,n);
对于(i=0;ib[j])
{
b[i]=b[i]+b[j];//交换
b[j]=b[i]-b[j];
b[i]=b[i]-b[j];
}
k=j;
j=(i+1)/2-1;//跟踪父节点
}       
}
返回b;
}

无限循环位于
createHeap
中。您没有看到字符串“out”,因为您没有在字符串的末尾添加换行符。要添加到@dbush的注释中,控制台/终端输入和输出在几乎所有现代系统中都是行缓冲的,并且是POSIX规范的一部分,这意味着“打印或扫描”操作在行结束后执行,就像您按
[ENTER]时一样
向程序发送输入-除了在输出中,您需要
\n
来表示行尾。或者,您可以
fflush(stdout)
强制打印,但只添加换行符可能更容易。