排序程序停止运行,没有任何错误

时间:2018-09-04 14:41:52

标签: 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);
    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;
}

1 个答案:

答案 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'在此处使用时未初始化始终是错误。