scanf 在 C 中被跳过

scanf is being skipped in C

我尝试运行以下程序:

int main(){
    char a;
    char b;
    char c;

    printf("\nenter a: ");
    scanf("%c", &a);

    printf("\nenter b: ");
    scanf("%c", &b);

    printf("\nenter c: ");
    scanf("%c", &c);

    return 0;

}

在 运行 启动程序时,它会提示您输入 a 的值。完成后,系统会提示您输入 b 的值,但是不允许您输入值,因为程序会跳过扫描,然后再次提示您输入未跳过的 c 值。我可以初始化 a 和 c,但不能初始化 b。我不知道为什么。我在某处读到在 scanf 中使用 %[^\n],但我尝试使用它但我认为我没有正确使用它,因为它仍然无法正常工作。

这是输出(带有一些输入示例):

enter a: 1

enter b: 
enter c: 1

process returned 0 (0x0)

而不是 "%c",使用 " %c"

如果没有 space,当格式说明符为 %c 时,scanf 不会跳过白色的 spaces。这最初令人困惑,因为它会跳过其他格式说明符的白色 space,例如 %d%f%s

当您按 enter 时,会向输入队列添加一个字符,然后将其读入 b

您可以显式读取一个字符以忽略它,或者您可以使用(作为一种选择)%1s 读取单字符字符串(这将跳过 white-space,包括按 enter.

时输入的换行符
enter 后,

'\n' 成为变量 b 的输入。 所以要解决这个问题,请使用 getchar() 来处理 '\n'.

int main(){
    char a;
    char b;
    char c;

    printf("\nenter a: ");
    scanf("%c", &a);
    getchar();    

    printf("\nenter b: ");
    scanf("%c", &b);
    getchar();

    printf("\nenter c: ");
    scanf("%c", &c);

    return 0;

}