我尝试使用字符数据类型在变量reply
中进行比较,如果等于y
,它将继续调用函数recursion()
,但是,它只做了1 { {1}}通话,程序终止。这只有在我使用int数据类型作为要比较的变量时才有效。请有人能告诉我为什么会这样吗?
recursion()
输出:
#include <stdio.h>
void recursion()
{
char reply;
printf("Continue?:");
reply=getchar();
if(reply=='y')
{
printf("Continued\n");
recursion();
}
}
int main()
{
recursion();
return(0);
}
答案 0 :(得分:3)
getchar()
会读取换行符,如果是,则会阻止它继续播放。
试试这个:
#include <stdio.h>
int getchar2()
{
int c;
do
{
c = getchar();
} while (c == '\n'); /* ignore newline characters */
return c;
}
void recursion()
{
int reply;
printf("Continue?:");
reply=getchar2();
if(reply=='y')
{
printf("Continued\n");
recursion();
}
}
int main()
{
recursion();
return(0);
}
答案 1 :(得分:0)
问题是,当最终用户在终端中输入'y'
时,他们会按 Enter 。这会在流中插入另一个字符 - '\n'
。这是下一次调用getchar()
将返回的字符,结束由于
if(reply=='y')
条件评估为“假”。
您可以通过多种方式解决问题 - 例如,使用scanf
:
if (scanf(" %c", &reply) == 1 && reply == 'y')
// ^
// Note the space above
在%c
前添加空格字符可确保scanf
在将字符读入reply
变量之前跳过空白字符。