输入字符串,按逆序输出——递归

输入一串以“!”结束的字符串,按逆序输出,要求用递归,请问这样写有什么问题吗,结果运行出一堆乱码。

#include
#include
int main()
{
    void convert(char* s);
    int i;
    char s[100], ch;
    ch = getchar();
    for (i = 0; ch != '!'; i++)
    {
        s[i] = ch;
        ch = getchar();
    }
    convert(s);
    return 0;
}
void convert(char* s)
{
    if (*s == '!')
        return;
    else
    {
        convert(s+1);
        printf("%c", *s);
    }
}

if (*s == '!')
main里的循环并没有将感叹号写入数组啊,你这判断根本不成立

供参考:

#include <stdio.h>
#include <string.h>
void convert(char *s)
{
    if (*s != '\0'){
        convert(s + 1);
        printf("%c", *s);
    }
}

int main()
{
    char s[128];
    gets(s);
    convert(s);
    return 0;
}