код не показывает вывод, завершающийся во время выполнения - PullRequest
0 голосов
/ 29 октября 2019

это код для вставки элемента в массив, который не показывает никакого вывода, но принудительно завершает работу во время выполнения.

 #include<stdio.h>
 #include<stdlib.h>

struct array
 {
int a[10];
int size;
int length;
};

void display(struct array arr)
{
int i;
printf("\nthe elemenets are\n");
for(i=0;i<arr.length;i++)
{
    printf("%d ",arr.a[i]);
}
}

void insert(struct array *arr,int index,int value)
{
int i;

if(index>=0&&index<=arr->length)
{
    for(i=arr->length;i>index;i++)
        arr->a[i]=arr->a[i-1];
    arr->a[index]=value;
    arr->length++;
}
}

 int main()
 {
 struct array arr1={{1,2,3,4,5},10,5};
 insert(&arr1,2,45);
 display(arr1);
 return 0;
 }

Я думаю, что может быть проблема в функции отображения, но не удаетсяпонять это.

1 Ответ

1 голос
/ 29 октября 2019

Этот цикл недопустим

if(index>=0&&index<=arr->length)
{
    for(i=arr->length;i>index;i++)
        arr->a[i]=arr->a[i-1];
    arr->a[index]=value;
    arr->length++;
}

, потому что по крайней мере переменная i увеличивается, а не уменьшается. И условие в операторе if

if(index>=0&&index<=arr->length)
             ^^^^^^^^^^^^^^^^^^

недопустимо.

Я думаю, вы имеете в виду следующее

if ( index>=0 && index < arr->length )
{
    for ( i = arr->length; i-1 >index; i-- )
        arr->a[i-1] = arr->a[i-2];

    arr->a[index] = value;
    arr->length++;
}
...