0
#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 和类似的东西)。

4

4 回答 4

3

in rec function else part you are passing a element which should be address of element.so try this in else part

else
     {    
        rec(&pin[i+1]);
        printf("%c", pin[i]);

     }
于 2013-05-17T07:52:47.040 回答
1

好吧,既然您的问题是“为什么它不起作用”,那么不妨准确回答一下。

我将假设该re()声明只是一个错字rec()——当然你必须更正它。

在该函数的第一行中,您声明了一个变量int i = 0;. 但是,该变量永远不会再次分配给。扫描功能上的任何分配i- 你不会找到任何。因此,该i变量是一个常量 0。考虑到这一点,让我们替换i0并再次编写代码:

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指向第二个。

于 2013-05-17T07:56:39.693 回答
1

这是不正确的。首先,您使用的是自动变量。所以,'i' 将始终被初始化为 0。

使用static int i,仔细看。您正在将 char 扔给 char*。所以,你不能抛出 rec(pin[i+1]); 将此更改为rec(pin);在 printf("%c", pin[i]); 之前 递减“i”,在递归调用之前,递增“i”。最后但并非最不重要的一点是,您正在调用“rec”。但是函数名是're',c在哪里???

于 2013-05-17T08:11:50.340 回答
0
void rec(char pin[]){
    if (*pin=='\0')
        return;
    else {
        rec(pin + 1);
        printf("%c", *pin);
    }
}
于 2013-05-17T08:42:12.897 回答