Arrays 由于定义了指针,数组为非法索引获取输入
在下面的代码中,在main函数中,如果我删除“p=createHeap(n,a)”,那么它将正常地接受输入,直到定义为n为止。但若不删除它,那个么数组输入(for循环)将继续不断地获取输入(无限循环)。不知道原因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
#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)
强制打印,但只添加换行符可能更容易。