2013-05-17 52 views
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和類似的東西)。使用遞歸函數的反轉字符串

+1

您調用rec()函數,但它的聲明是:re(....)。錯字? – ChristopheBrun

+0

對行爲進行更全面的描述,而不是「看起來不行」會有所幫助。你可以發佈一些輸出嗎? –

+1

rec(pin [i + 1]);這條線上的錯誤 初始化'void rec(char *)'的參數1 –

回答

3
在錄製功能else部分

你逝去的應該是element.so嘗試這種在其他部分地址的元素

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

    } 
+0

在這種情況下,程序開始,但是在scanf之後被壓碎。 –

+0

@NorTee我不明白你的觀點,請你解釋一下。 –

1

好吧,既然你的問題是「爲什麼它不工作」,可能以及答案完全一樣。

我打算假設re()聲明只是rec()的錯字 - 當然您必須糾正錯誤。

在該函數的第一行中,聲明變量int i = 0;。但是,該變量永遠不會再被分配。在i上掃描任何作業的功能 - 您將找不到任何作業。因此,i變量是一個常數0。考慮到這一點,讓我們0更換i,再次寫代碼:

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指向第二個字符。

+0

你的答案幫了我很多。非常感謝你。 –

+0

隨時!樂意效勞。 – aaaaaa123456789

1

這是不正確的。首先,你正在使用一個自動變量。因此,'i'將始終初始化爲0.

使用static int i,並仔細查看。你正在向char *扔char。所以,你不能扔rec(pin [i + 1]);將其更改爲rec(pin);和printf(「%c」,pin [i])之前;在遞歸調用rec之前遞減'i',遞增'i'。最後但並非最不重要的是,您正在調用'rec'。但函數名是're',其中c是?

0
void rec(char pin[]){ 
    if (*pin=='\0') 
     return; 
    else { 
     rec(pin + 1); 
     printf("%c", *pin); 
    } 
}