在while循环中扫描字符

Bra*_*cus 5 c scanf char while-loop

char player_select(void){

    char player = 'n';

    while(player == 'n'){
        printf("Select your player (X or O): ");
        scanf("%c\n", &player);

        if(player != 'X' && player != 'O'){
            printf("Invalid input. Try again.\n");
            player = 'n';
        }
    }

printf("Your character input is: %c\n", player);
exit(0);
return player;
}
Run Code Online (Sandbox Code Playgroud)

我在这里得到一些奇怪的输出:

选择你的播放器(X或O):X

输入无效.再试一次.

选择你的播放器(X或O):i

你的角色输入是:X

Nil*_*oct 0

尝试:

    if (scanf("%c\n", &player) == 1 && player != 'X' && player != 'O'){
        printf("Invalid input. Try again.\n");
        player = 'n';
    }
Run Code Online (Sandbox Code Playgroud)

带入scanf,if从上面的代码中删除,并检查其返回值 == 1

\n如果这还不够,您可以尝试从 scanf 掩码中删除。