#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rec(char pin[]);
main()
{
char pin[100];
printf("Give word: ");
scanf("%s", pin);
rec(pin);
system("pause");
}
void rec(char pin[])
{
int i=0;
if (pin[i]=='\0')
return;
else
{
rec(pin[i+1]);
printf("%c", pin[i]);
}
}
似乎没有用,但我不知道为什么。 (我不允许使用for循环,函数strlen和类似的东西)。
答案 0 :(得分:3)
在rec函数else部分你传递的元素应该是element的地址。所以在else部分尝试这个
else
{
rec(&pin[i+1]);
printf("%c", pin[i]);
}
答案 1 :(得分:1)
好吧,既然你的问题是“为什么它不起作用”,那么不妨回答一下。
我将假设re()
声明只是rec()
的拼写错误 - 当然你必须纠正错误。
在该函数的第一行中,您声明一个变量int i = 0;
。但是,永远不会再分配该变量。扫描该功能以查找i
上的任何作业 - 您将找不到任何作业。因此,i
变量是常数0.考虑到这一点,让我们用i
替换0
并再次编写代码:
if (pin[0]=='\0')
return;
else
{
rec(pin[1]);
printf("%c", pin[0]);
}
违规行显然是rec(pin[1])
。该函数需要一个char *
参数,即一个字符串(注意char *
和char []
在函数参数声明中是相同的)。但是,pin[1]
只是pin
的第二个字符。你正在做的是将该字符隐式转换为指针并将其传递给函数 - 这是不正确的。
要传递给rec()
的是指向第二个字符的指针,因为这会使它成为指向从pin
的第二个字符开始的字符串的指针。因此,正确的调用将是rec(pin + 1)
,而不是rec(pin[1])
。由于pin
指向字符串的第一个字符,pin + 1
指向第二个字符。
答案 2 :(得分:1)
这不正确。首先,您使用的是自动变量。所以,'i'将始终初始化为0。
使用static int i,仔细查看。你把char扔给了char *。所以,你不能扔rec(pin [i + 1]);将此更改为rec(pin);在printf之前(“%c”,pin [i]);在递归调用rec之前递减'i',递增'i'。最后但并非最不重要的是,你打电话给'rec'。但是函数名是're',其中是c ???
答案 3 :(得分:0)
void rec(char pin[]){
if (*pin=='\0')
return;
else {
rec(pin + 1);
printf("%c", *pin);
}
}