所以,我想让用户输入一个单词然后,程序将反转它。这是我的代码,但它没有正常运行。怎么了?
#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]);
}
答案 0 :(得分:2)
为什么不
void anadr(int l, char pin[])
{
if(l == 0)
return;
printf("%c", pin[l - 1]);
anadr(l - 1, pin);
}
anadr(5, "abcde");
答案 1 :(得分:1)
您的所有代码似乎都试图反向打印字符串。只需递归终结者并在退出途中转储字符。
void anadr(const char *p)
{
if (!*p)
return;
anadr(p+1);
putchar(*p);
}
答案 2 :(得分:0)
这里至少有一个问题:
if(i<l)
anadr(i++,l,pin);
这导致无休止的递归,因为{/ 1}}仅在 之后递增i++
,其当前值已作为参数传递。尝试将i
替换为i++
。
此外,即使使用上述修复,比较也会导致额外的呼叫; i + 1
处的字符是终止NUL,您几乎肯定不想打印。所以比较应该是pin[l]
。
答案 3 :(得分: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]);
}