-6

所以,我想要求用户输入一个单词,然后程序会反转它。这是我的代码,但无法正常运行。怎么了?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char anadr(int, int, char pin[]);

main()
{
      char pin[100];
      int l;
      int i=0;
      char res;
      printf("Give word: ");
      scanf("%s", pin);
      l=strlen(pin);
      res=anadr(i,l,pin);
      system("pause");
}

char anadr(int i, int l, char pin[])
{
     if(i<l)
        anadr(i++,l,pin);
     printf("%c", pin[i]);
}
4

4 回答 4

2

为什么不

void anadr(int l, char pin[])
{
     if(l == 0)
          return;

     printf("%c", pin[l - 1]);
     anadr(l - 1, pin);
}

anadr(5, "abcde");
于 2013-04-15T23:35:27.113 回答
1

您的所有代码似乎都试图做的是反向打印字符串。只需递归到终结器并在退出的路上转储字符。

void anadr(const char *p)
{
    if (!*p)
        return;
    anadr(p+1);
    putchar(*p); 
}
于 2013-04-15T23:40:16.553 回答
0

这里至少有一个问题:

if(i<l)
    anadr(i++,l,pin);

这会导致无休止的递归,因为只有其当前值作为参数传递后才会i++递增。尝试替换为.ii++i + 1

此外,即使使用上述修复,比较也会导致额外的调用;处的字符pin[l]是终止 NUL,您几乎肯定不想打印它。所以比较应该是if (i+1 < l)

于 2013-04-15T23:36:13.643 回答
0

你有一个错误,你不应该使用++。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void anadr(int, int, char pin[]);

int main()
{
      char pin[100];
      int l;
      int i=0;
      //char res;
      printf("Give word: ");
      scanf("%s", pin);
      l=strlen(pin);
      anadr(i,l,pin);
      //system("pause");
}

void anadr(int i, int l, char pin[])
{
     if(i<l-1)
        anadr(i+1,l,pin);
     printf("%c", pin[i]);
}
于 2013-04-15T23:40:23.037 回答