Извините, но ваш код действительно не работает.Я действительно не знаю, как это исправить, не переписывая его с нуля.Первое наиболее очевидное это:
void reverse(char *str, int i, int j)
{
for (i = 0; i < len; i++)
Вы отбрасываете то, что было в переменной i
, инициализируя ее нулем.Таким образом, эта функция будет делать то же самое независимо от значения, если i
.
Вы также используете много глобальных переменных без веской причины.НИКОГДА не используйте глобалы, если у вас нет веских причин, и это не одна из них.Переместите объявление i, j, k, len, ind и temp в тело реверса.Переместите объявление str в main.
Переменная j никогда не используется.
НИКОГДА не используйте функцию gets
.Он был удален из современного C.
printf("%s\n",str[i]);
не имеет смысла.Вы пытаетесь напечатать символ i: th, но в виде строки.Это неопределенное поведение.
Включить предупреждения компилятора.Вот что я получил, когда скомпилировал ваш код:
$ gcc b.c -Wall -Wextra
b.c: In function ‘main’:
b.c:10:5: warning: implicit declaration of function ‘gets’; did you mean ‘fgets’? [-Wimplicit-function-declaration]
gets(str);
^~~~
fgets
b.c: In function ‘reverse’:
b.c:34:13: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("%s\n",str[i]);
~^ ~~~~~~
%d
b.c:15:36: warning: unused parameter ‘j’ [-Wunused-parameter]
void reverse(char *str, int i, int j)
~~~~^