Посмотрите на это, если оператор
if ((strcmp(str, "quit\n") == 0) || (strcmp(str, "q\n")==0) || (strcmp(str, "Quit\n")== 0)){
Вы видите, что каждый строковый литерал, используемый в условии, имеет дополнительно символ новой строки '\n'
.
Это означает, что массив символов str имеет этот символ, и этот символ выводится в функции, которая выводит массив в обратном порядке.
Вы можете удалить символ из массива перед передачей его функции следующим образом
str[ strcspn( str, "\n" ) ] = '\0';
Или это необходимо сделать до того, как оператор if и оператор if переписать, как
if ((strcmp(str, "quit") == 0) || (strcmp(str, "q")==0) || (strcmp(str, "Quit")== 0)){
Обратите внимание, что рекурсивный вызов main не имеет большого смысла.
return main();
Вы можете заключить код в main в al oop.
Сама функция должна быть объявлена и определена как минимум следующим образом
void revStr( const char str[] )
{
size_t arrSz = strlen( str );
while ( arrSz-- ) putchar( str[arrSz] );
}
Вот демонстрационная программа
#include <stdio.h>
#include <string.h>
void revStr( const char str[] )
{
size_t arrSz = strlen( str );
while ( arrSz-- ) putchar( str[arrSz] );
}
int main(void)
{
revStr( "Hello World!" );
return 0;
}
Его вывод
!dlroW olleH