#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
inmain
. Вам нужно избавиться от одного изrenverser
них и передать его в качестве дополнительного аргумента вашей функции frommain
вместо этого.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 );