C 在while循环中扫描字符

C 在while循环中扫描字符,c,while-loop,char,scanf,C,While Loop,Char,Scanf,我在这里得到一些奇怪的输出: 选择您的玩家(X或O):X 无效输入。再试一次 选择你的玩家(X或O):i 您的字符输入是:X请尝试: char player_select(void){ char player = 'n'; while(player == 'n'){ printf("Select your player (X or O): "); scanf("%c\n", &player); if(player !=

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

选择您的玩家(X或O):X

无效输入。再试一次

选择你的玩家(X或O):i

您的字符输入是:X

请尝试:

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;
}
scanf
放入
if
,从上述代码中删除,并检查其返回值==
1


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

不正确使用
scanf()

“%c\n”
中的
“\n”
没有按您的想法执行
'\n'
告诉
scanf()
'\n'
'
一样使用空格,直到出现非空格。您的输入不符合描述

由于
stdin
是缓冲的,文本本身通常在
'\n'
之后才会被读取

详细解释事情失败的原因变得复杂了。简单地说,使用
%c
而不是
%c\n“
。或者更好地使用
fgets()


我希望这对你有用。 我已经删除了
scanf
中的
\n
,并且添加了
while(getchar()!='\n')用于清空
stdin

buffer player[10];
fgets(ch, sizeof ch, stdin);
if(player[0] != 'X' && player[0] != 'O') { ...
这是输出:

char player_select(void){

char player = 'n';

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

    if(player != 'X' && player != 'O'){
        printf("Invalid input. Try again.\n");
        player = 'n';
    }
    while(getchar()!='\n');
}
建议
while(getchar()!='\n')字符,则在
if()
块之外使用
\n
buffer player[10];
fgets(ch, sizeof ch, stdin);
if(player[0] != 'X' && player[0] != 'O') { ...
char player_select(void){

char player = 'n';

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

    if(player != 'X' && player != 'O'){
        printf("Invalid input. Try again.\n");
        player = 'n';
    }
    while(getchar()!='\n');
}
Select your player (X or O): A
Invalid input. Try again.
Select your player (X or O): X
Your character input is: X