C getchar()奇怪的行为

时间:2014-08-28 18:04:37

标签: c getchar

所以我测试了一些东西,我注意到如果用户输入为Y / y,则使用以下代码它将不会出现循环(我再次调用getchar()来摆脱\ n在队列中,以便它可以为用户的下一个输入做好准备):

#include <stdio.h>
#include <stdbool.h>

int main(int argc, char* argv[]) {
    for(int i = 0; i < argc; i++)
        printf("argv[%d] = %s\n", i, argv[i]);
    char name[20];
    printf("What's your name ? ");
    gets(name);
    char lastname[20];
    printf("%s what's your last name ? ", name);
    fgets(lastname, 20, stdin);
    int age;
    printf("%s %s what's your age? ", name, lastname);
    scanf("%d", &age);
    bool exit = false;
    char c;
    while (!exit) {
        printf("Do you wish to exit the program ? (Y/N) ");
        c = getchar();
        getchar();
        if (c == 'Y' || c == 'y')
            exit = true;
    }
    printf("Have a nice day %s %s.\n", name, lastname);
    return 0;
}

有人可以告诉我这是什么问题吗?

1 个答案:

答案 0 :(得分:0)

当您进入循环时,输入流中已存在换行符。这会导致您的第一个getchar返回\n。第二个getchar读取Y。要解决此问题,您需要在进入循环之前进行getchar调用。