Почему обратная функция, которую я определил, не выполняется должным образом?

#arrays #c #reverse #function-definition

#массивы #c #обратный #функция-определение

Вопрос:

Почему renverser функция (reverse) не выполняет свою работу и почему программа завершает работу сразу после инициализации таблицы?

 #include <stdio.h>
#include <stdlib.h>
void renverser(int t[])
{   int j,i,n;
    for(i=0,j=n-1;i<j;i  ,j--)
    {
        int a=t[i];
        t[i]=t[j];
        t[i]=a;
    }
    for (i=0;i<n;i  )
    {
        printf("%d",t[i]);
    }
}

int main()
{   int i,n;
    float t[100];
    printf("donner le taille du tableau a renverser n :");
    scanf("%d",amp;n);
    for (i=0;i<n;i  )
    {   printf("donner l'element %d: n",i);
        scanf("%d",amp;t[i]);
    }
    renverser(t);
    return 0;
}
  

Комментарии:

1. for(i=0,j=n-1;i<j;i ,j--) — потому n что не имеет определенного значения в этот момент времени. n renverser In — это не тот же n in main . Вам нужно избавиться от одного из renverser них и передать его в качестве дополнительного аргумента вашей функции from main вместо этого.

2. Отладка — это важный навык, который необходимо развивать по мере обучения программированию. Прочтите эту статью , чтобы получить советы, которые помогут вам начать работу.

Ответ №1:

Функция не имеет смысла, потому что размер переданного массива неизвестен.

Более того, функция имеет неопределенное поведение, потому что используется неинициализированная переменная n .

И тип параметра функции int * равен, в то время как выражение переданного аргумента имеет тип float * .

Похоже, вы имеете в виду следующее объявление массива

 int t[100];
  

И функция должна делать только одно: инвертировать массив.

Результирующий массив, который вы должны вывести в main.

Функция может быть объявлена и определена следующим образом

 void renverser( int t[], size_t n )
{
    for ( size_t i = 0; i < n / 2; i   )
    {
        int tmp = t[i];
        t[i] = t[n - i - 1];
        t[n - i - 1] = tmp;
    }
}
  

и функция может быть вызвана как

 renverser( t, n );