2011-09-09 5 views
0

J'ai une question à propos de la récursivité. Mon code est assez simple. Il ressemble à:Question rapide sur la récursivité dans 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!"); 
    } 
} 

Je veux qu'il en soit ainsi si vous continuez à frapper n, il exécute la méthode à nouveau et vous demande d'entrée à nouveau et continuer à répéter jusqu'à ce que vous frappez un y. Cela fonctionne une fois mais après que la méthode soit appelée à nouveau pour une raison quelconque, il imprime automatiquement le else stmt. Est-ce que quelqu'un sait ce qui pourrait se passer ici?

Merci!

+1

Cela n'a pas besoin récursion, une simple boucle fonctionnerait. –

+6

Veuillez prendre le temps de mettre le code en retrait. Des efforts plus apparents rendent plus de personnes plus disposées à fournir de l'aide/des idées. –

+0

Ok, je vais la prochaine fois merci pst. – Spencer

Répondre

3

Remplacez "%c" par "%c " afin qu'il mange la nouvelle ligne. Plus généralement, l'utilisation de scanf pour l'entrée de l'utilisateur ne fonctionne pas très bien, il y a beaucoup de surprises comme celle-ci.

+0

Hmm. Quand j'essaie cela, je dois d'abord répondre à ma réponse deux fois. Y a-t-il une meilleure manière de faire cela? – Spencer

+0

Vous m'a conduit à la réponse. Quand j'ai changé "% c" en "% c". Ça a marché! merci – Spencer

+0

Il semble que la sortie est en retard par rapport à l'entrée, ou quelque chose. Pas certain de pourquoi. Je voudrais juste utiliser 'fgets' au lieu de' scanf'. –

0

Vous n'avez pas besoin de récursion, une boucle "do-while" fera très bien l'affaire.

#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!"); 
} 

Si vous voulez utiliser ici récursion:

#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

Mais il a demandé comment faire cela avec récursivité:/ – BlackBear

+0

Bien sûr, pas de problème. – Fu86