我有一个关于递归的问题。我的代码非常简单。它看起来像:
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。这可以工作一次但是在由于某种原因再次调用该方法之后它会自动打印出else stmt。有谁知道这里会发生什么?
谢谢!
答案 0 :(得分:3)
将"%c"
更改为"%c "
,以便它会占用换行符。
更一般地说,使用scanf
进行用户输入效果不佳,有很多意外情况。
答案 1 :(得分: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();
}