我键入了以下代码来对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);
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;
}
答案 0 :(得分:0)
问题在这里:
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'在此处使用时未初始化始终是错误。