while循环第二次忽略scanf

use*_*968 9 c scanf while-loop

#include <stdio.h>

int main ()
{
    char loop='y';
    while(loop != 'n') {
        printf("loop? ");
        scanf("%c", &loop);
        if(loop != 'y') {
            loop='n';
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我键入'y',他会重新启动while循环,但会在第二次忽略scanf并在此之后结束循环.有人可以帮忙吗?

cni*_*tar 16

确保scanf丢弃换行符.将其更改为:

scanf(" %c", &loop);
       ^
Run Code Online (Sandbox Code Playgroud)

  • @ user1069968该空间使`scanf`忽略所有空格(包括换行符). (2认同)

sid*_*yll 10

您可能不得不输入换行符,以便输入到您的程序,对吧?第二次执行循环时,它会读取换行符,该行正在"等待"读取并自动退出循环('\n' != 'y').您可以使用此格式字符串使scanf忽略空格:

" %c"
Run Code Online (Sandbox Code Playgroud)