Программа сортировки перестает работать без ошибок - PullRequest
0 голосов
/ 04 сентября 2018

Я набрал следующий код для сортировки компонентов массива 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 голосов
/ 04 сентября 2018

Проблема здесь:

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' не инициализируется при использовании здесь всегда является ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...