2011-09-09 9 views
0

再帰に関する質問があります。私のコードはかなり簡単です。私はあなたがn個を打っておくならば、それが再びメソッドを実行し、再入力をお願いし、yをヒットするまで繰り返し続けますので、それを持ってしたいcでの再帰についての簡単な質問

void test(); 

int main(void) { 
    test(); 
} 

void test() { 
    char c; 
    printf("Are you happy?\n"); 
    printf("Enter a y for yes, or an n for no\n"); 
    scanf("%c", &c); 

    if(c == 'n') { 
     test(); 
    } else { 
     printf("That's Awesome!"); 
    } 
} 

:ように見えます。これは一度動作しますが、何らかの理由でメソッドが再度呼び出された後、自動的にelse stmtが出力されます。誰でもここで何が起こっているのか知っていますか?

ありがとうございます!

+1

これは、単純なループが働くだろう、再帰を必要としません。 –

+6

インデントコードに時間をかけてください。より明白な努力により、より多くの人々がヘルプ/洞察力を提供する意欲を高めています。 –

+0

さて、次回はpstに感謝します。 – Spencer

答えて

3

"%c"から"%c "に変更して改行文字を入力します。

さらに一般的には、ユーザ入力にscanfを使用するとうまくいきません。このような驚きがたくさんあります。

+0

Hmm。私がこれを試してみると、私は最初に2回答えをキーしなければなりません。これを行うより良い方法はありますか? – Spencer

+0

あなたは私を答えに導いた。 "%c"を "%c"に変更しました。出来た!ありがとう – Spencer

+0

出力が入力の後ろに遅れているようです。理由は分かりません。 'scanf'の代わりに' fgets'を使うだけです。 –

0

あなたは再帰を必要としません。do-whileループはうまく機能します。

#include <stdio.h> 

void test(); 

int main(void) { 
    test(); 
} 

void test() { 
    char c; 
    do { 
    printf("Are you happy?\n"); 
    printf("Enter a y for yes, or an n for no\n"); 
    scanf("%c", &c); 
    } while (c != 'y'); 
    printf("That's Awesome!"); 
} 

あなたがここに再帰を使用する場合:

#include <stdio.h> 

void test(); 

int main(void) { 
    test(); 
    printf("That's Awesome!"); 
} 

void test() { 
    char c; 
    printf("Are you happy?\n"); 
    printf("Enter a y for yes, or an n for no\n"); 
    scanf("%c", &c); 

    if (c != 'y') test(); 
} 
+2

しかし、彼は再帰でこれを行う方法を尋ねました:/ – BlackBear

+0

もちろん、問題ありません。 – Fu86