为什么当我输入正确的 switch 语句时会被忽略

问题描述

输出

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