C 在while循环中扫描字符
我在这里得到一些奇怪的输出: 选择您的玩家(X或O):X 无效输入。再试一次 选择你的玩家(X或O):i 您的字符输入是:X请尝试: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 !=
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