C 排序程序停止工作,没有任何错误
我键入以下代码对int数组的组件进行排序。它不会显示任何错误,但会突然停止工作。错误通常是在输入7-8个输入后出现的,这表明program.exe已停止工作。它是否与代码相关C 排序程序停止工作,没有任何错误,c,sorting,C,Sorting,我键入以下代码对int数组的组件进行排序。它不会显示任何错误,但会突然停止工作。错误通常是在输入7-8个输入后出现的,这表明program.exe已停止工作。它是否与代码相关 #include <stdio.h> #include <stdlib.h> int main() { int n,a[n],i,j,temp; printf("Enter number of inputs.\n"); scanf("%d",&n); pri
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a[n],i,j,temp;
printf("Enter number of inputs.\n");
scanf("%d",&n);
printf("Enter inputs\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
printf("Numbers in descending order are:\n");
for(i=0;i<n;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
#包括
#包括
int main()
{
int n,a[n],i,j,temp;
printf(“输入输入的数量。\n”);
scanf(“%d”和“&n”);
printf(“输入输入\n”);
对于(i=0;i而言,问题在于:
int n, a[n], i, j, temp;
声明是按顺序完成的。如果您以更容易理解的形式(但等效的形式)编写此声明,您将得到以下结果:
int n;
int a[n]; // here the variable n has not yet been initialized
// it contains an indeterminate value, and therefore the a array
// will have an indeterminate size and the program will have
// so called "undefined behaviour " (google that)
int i;
...
您应该这样编写程序的开头:
int main()
{
int n,i,j,temp;
printf("Enter number of inputs.\n");
scanf("%d",&n);
int a[n]; // now n has a determinate value
printf("Enter inputs\n");
免责声明:为简洁起见,未进行任何错误检查
始终在启用警告的情况下编译并侦听它们。其中许多实际上都是错误。特别是警告变量“somevar”在此处使用时未初始化始终是错误的。prog.cc:6:12:警告:变长数组是C99功能[-Wvla扩展]prog.cc:6:13:警告:变量“n”在此处使用时未初始化[-Wuninitialized]
欢迎使用Stackoverflow。首先,您应该修复您的程序,并始终听取编译器的警告(和注释)!。其次,这并不难,而且可以节省您的提问时间;)