C程序在第一次递归调用后停止

时间:2015-12-01 13:32:19

标签: c

我尝试使用字符数据类型在变量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);
}

2 个答案:

答案 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变量之前跳过空白字符。