мой код содержит ошибку, которая дает неожиданный вывод, поэтому я хочу понять, в чем проблема? - PullRequest
2 голосов
/ 26 апреля 2020

Я хочу написать функцию C, которая будет возвращать массив, содержащий значения между двумя 8-битными целыми числами без знака в порядке убывания заказа.

Функция принимает 2 значения (LowerValue и UpperValue). Она определяет промежуточные значения, а затем упорядочивает последовательность в порядке убывания, исключая верхнее и нижнее значения. Если LowerValue больше или равно UpperValue, вернуть массив из 2 элементов, оба из которых содержат значение = 0xFF Пример: Input: LowerValue = 5 и UpperValue = 10 Output: Output Array = 9,8,7,6 Output Array Size = 4

(но мой код содержит ошибку, в результате которой размер = ноль и пустой массив

#include <stdio.h>
/* Global array is empty and will be filled by PrintReverseInclusive function */
int OutputArray[256];
int * PrintReverseInclusive(int LowerNumber,int UpperNumber,int * result_size);

int main(void) {
     int count;
    int n1 = 5,n2=10;
    int *ptr;

    int arr_size_used = 0;


    ptr = PrintReverseInclusive(n1,n2,&arr_size_used);
            printf("Output Array = ");

    /* start looping from 0 to the last used element in the array */
    for(count=0;count<arr_size_used;count++)
    {
        /* access the global array using the ptr */
        printf("%d ",ptr[count]);
    }
    printf("\nOutput Array Size = %d",arr_size_used);
    return 0;
}




int * PrintReverseInclusive(int LowerNumber,int UpperNumber,int * result_size)
{
     int i;
    *result_size = 0;
    /* check the exit conditions */
    if((LowerNumber>=UpperNumber) || (UpperNumber-1 == LowerNumber))
    {   
        OutputArray[0] = 0xFF;
        OutputArray[1] = 0xFF;
        *result_size = 2;
    }
    else
    {

        for(i=UpperNumber-1;i>LowerNumber;i--)
        {
            OutputArray[*result_size] = i;
            (result_size)++;
        }
    }
    return OutputArray;
}

1 Ответ

2 голосов
/ 26 апреля 2020

КАК вы пропустили * в последнем для l oop, где

 (result_size)++;

должно быть

(*result_size)++;

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

for(i=UpperNumber-1;i>LowerNumber;i--)
        {
            OutputArray[*result_size] = i;
            (*result_size)++;
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...