问题描述
输出:
Select your sign Tom: [X] or [O]
Y
ERROR ENTER A DIFFERENT CHaraCTER
X
Player 2 = O
但我想要这样:
Select your sign Tom: [X] or [O]
Y
ERROR ENTER A DIFFERENT CHaraCTER
X
Player 1 = X
Player 2 = O
printf("Select your sign %s: [X] or [O]\n",PLAYER1);
scanf(" %c",&P1_SIGN);
do{
switch (P1_SIGN) { //entrata segni
case 'X':
puts("Player 1 = X\n");
P1_SIGN = 'X';
break;
case 'x':
puts("Player 1 = X\n");
P1_SIGN = 'X';
break;
case 'O':
puts("Player 1 = O\n");
P1_SIGN = 'O';
break;
case 'o':
puts("Player 1 = O\n");
P1_SIGN = 'O';
break;
default:
puts("ERROR ENTER A DIFFERENT CHaraCTER");
scanf(" %c",&P1_SIGN);
break;
}} while(P1_SIGN != 'X' && P1_SIGN != 'x' && P1_SIGN != 'O' && P1_SIGN != 'o');
if (P1_SIGN == 'X' || P1_SIGN == 'x') {
puts("Player 2 = O\n");
} else {
puts("Player 2 = X\n");
}
解决方法
您的 scanf()
位置错误。
第二个 scanf()
将读取输入 X
并且它会使 do-while
循环的条件为假。因此,循环体不会再次运行,因此不会打印 Player 1 = X
。
您应该删除两个 scanf()
,而不是它们在 scanf()
循环中的 do-while
语句之前添加一个 switch
。
do{
scanf(" %c",&P1_SIGN); // put scanf() here
switch (P1_SIGN) { //entrata segni