getchar 发生了什么?

What is happening with getchar?

我只是在这里寻找解释。我有一个简单的程序循环:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    while(1)
    {
        printf("ready to begin? Enter y or n: ");
        char begin = getchar();
        if(begin == 'y')
        {
            break;
        }
        else if(begin == 'n')
        {
            printf("good-bye.");
            return 0;
        }
    }
    printf("hu-ray\n");
    return 0;
}

当我编译并 运行 时,大部分行为都是预期的。示例:'y' 作为输入。

Ready to begin? Enter y or n: y
hu-ray

'n' 作为输入也给出了预期的行为以及只需按 ENTER。

Ready to begin? Enter y or n: n
good-bye.
Ready to begin? Enter y or n: 
Ready to begin? Enter y or n:

但是,如果我输入任何其他内容,例如 'k',我会得到:

Ready to begin? Enter y or n: k
Ready to begin? Enter y or n: Ready to begin? Enter y or n:

比较奇怪,输入'12345'的输出:

Ready to begin? Enter y or n: 12345
Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n: Ready to begin? Enter y or n

即使查看了 getchar() 的手册页,我还是不明白这里发生了什么。有人有解释吗?

每次调用 getchar() returns 一个字符。因此,当您在该提示下键入一行时,接下来的几个字符已经提供给下一次调用 getchar().

您可能想打电话给 fgets()