Быстрый вопрос о рекурсии в с - PullRequest
0 голосов
/ 10 сентября 2011

У меня есть вопрос по поводу рекурсии. Мой код довольно прост. Похоже:

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

Я хочу получить его, поэтому, если вы продолжаете нажимать n, он снова запускает метод и снова запрашивает ввод и будет повторять до тех пор, пока вы не нажмете y. Это работает один раз, но после повторного вызова метода по какой-то причине он автоматически распечатывает остальное stmt. Кто-нибудь знает, что здесь может происходить?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 сентября 2011

Измените "%c" на "%c ", чтобы он сожрал новую строку.

В целом, использование scanf для пользовательского ввода работает не слишком хорошо, таких сюрпризов много.

0 голосов
/ 10 сентября 2011

Вам не нужна никакая рекурсия, цикл 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!");
 }

Если вы хотите использовать рекурсию здесь:

...