C 如何使用&;编写具有多个条件的if语句&;和| | |?

C 如何使用&;编写具有多个条件的if语句&;和| | |?,c,if-statement,conditional-statements,C,If Statement,Conditional Statements,我正在做一个tic tac趾板游戏,我需要用户输入1到9之间的任何位置,然后输入X或O。我需要包括的一些条件是,我想限制用户输入任何大于9的数字,并且不输入任何大于“X”或“O”的字符。我遇到的问题是它没有遵循条件语句。任何帮助都将不胜感激 void CreateBoard(int m, int n, char board[][n]) { int i, j, position; char one; char two; char temp; char xO

我正在做一个tic tac趾板游戏,我需要用户输入1到9之间的任何位置,然后输入X或O。我需要包括的一些条件是,我想限制用户输入任何大于9的数字,并且不输入任何大于“X”或“O”的字符。我遇到的问题是它没有遵循条件语句。任何帮助都将不胜感激

void CreateBoard(int m, int n, char board[][n])
{
    int i, j, position;
    char one;
    char two; 
    char temp;
    char xORo;
    int count = 0;
    int end;

    do {
        printf("Enter the number of the cell you want to insert X or O or enter -1 to exit: \n");
        scanf("%d", &position);

        printf("Type X or O: \n");
        scanf(" %c", &xORo);

        if(position < 0){
            break;
        }
        if((position > 9) && xORo != ('X') && ('O'))
        {
            continue;
        }   
        else if((position > 0 || position < 9) && xORo == ('X') && ('O'))
        {
            switch(position)
            {
                case 1: temp = xORo;
                        xORo = board[0][0];
                        board[0][0] = temp; 
                        break;
                case 2: temp = xORo;
                        xORo = board[0][1];
                        board[0][1] = temp; 
                        break;
                case 3: temp = xORo;
                        xORo = board[0][2];
                        board[0][2] = temp; 
                        break;
                case 4: temp = xORo;
                        xORo = board[1][0];
                        board[1][0] = temp; 
                        break;
                case 5: temp = xORo;
                        xORo = board[1][1];
                        board[1][1] = temp; 
                        break;
                case 6: temp = xORo;
                        xORo = board[1][2];
                        board[1][2] = temp; 
                        break;
                case 7: temp = xORo;
                        xORo = board[2][0];
                        board[2][0] = temp; 
                        break;
                case 8: temp = xORo;
                        xORo = board[2][1];
                        board[2][1] = temp; 
                        break;
                case 9: temp = xORo;
                        xORo = board[2][2];
                        board[2][2] = temp; 
                        break;
            }
            PrintBoard(3, 3, board);
        }

    }while(position != -1);
}
void CreateBoard(int m,int n,char board[][n])
{
int i,j,位置;
半焦一号;
字符2;
焦炭温度;
char-xORo;
整数计数=0;
内端;
做{
printf(“输入要插入X或O的单元格编号,或输入-1退出:\n”);
扫描频率(“%d”,位置(&P);
printf(“X型或O型:\n”);
scanf(“%c”和&xORo);
如果(位置<0){
打破
}
如果((位置>9)和&xORo!=('X')&&('O'))
{
持续
}   
如果((位置>0 | |位置<9)和&xORo==('X')&('O'))
{
开关(位置)
{
情况1:temp=xORo;
xORo=板[0][0];
板[0][0]=温度;
打破
案例2:temp=xORo;
xORo=板[0][1];
板[0][1]=温度;
打破
案例3:temp=xORo;
xORo=板[0][2];
板[0][2]=温度;
打破
案例4:temp=xORo;
xORo=董事会[1][0];
板[1][0]=温度;
打破
案例5:temp=xORo;
xORo=董事会[1][1];
板[1][1]=温度;
打破
案例6:temp=xORo;
xORo=董事会[1][2];
板[1][2]=温度;
打破
案例7:temp=xORo;
xORo=董事会[2][0];
板[2][0]=温度;
打破
案例8:temp=xORo;
xORo=董事会[2][1];
板[2][1]=温度;
打破
案例9:temp=xORo;
xORo=董事会[2][2];
板[2][2]=温度;
打破
}
印刷电路板(3,3,电路板);
}
}而(位置!=-1);
}

你可以用一点数学来简化。给定一个索引
i
,您可以使用以下命令获取行/列:

row = i % 3;
col = i / 3;
请注意,
i
0-8
,而不是
1-9

可以使用辅助函数将索引转换为行/列:

void get_row_col(int index, int num_cols, int *row, int *col)
{
    *row = index % num_cols;
    *col = index / num_cols;
}
然后,您的功能可以简化为:

void CreateBoard(int m, int n, char board[][n])
{
    int position, row, col;
    char xORo;

    while (1) {
        printf("Enter the number of the cell you want to insert X or O or enter -1 to exit: \n");
        scanf("%d", &position);
        // TODO: Always check the return value from scanf

        if (position == -1) break;

        printf("Type X or O: \n");
        scanf(" %c", &xORo);

        if (position < 1 || position > 9 || (xORo != 'X' && xORo != 'Y')) {
            continue;
        }

        get_row_col(position - 1, 3, &row, &col);
        board[row][col] = xORo;
        PrintBoard(3, 3, board);
    }
}
void CreateBoard(int m,int n,char board[][n])
{
int位置、行、列;
char-xORo;
而(1){
printf(“输入要插入X或O的单元格编号,或输入-1退出:\n”);
扫描频率(“%d”,位置(&P);
//TODO:始终检查scanf的返回值
如果(位置==-1)中断;
printf(“X型或O型:\n”);
scanf(“%c”和&xORo);
如果(位置<1 | |位置>9 | | |(xORo!=“X”&&xORo!=“Y”)){
持续
}
获取行和列(位置-1、3和行和列);
董事会[行][col]=xORo;
印刷电路板(3,3,电路板);
}
}
这应该是第二个条件

else if((position > 0)&&(position < 9)&&(xORo =='X') && (xORo=='O'))
else如果((位置>0)和&(位置<9)和&(xORo='X')&(xORo='O'))
这应该是实现所需动机的最终条件。此外,无需使用do while循环条件(位置!=-1),因为在第一个条件中已经实现了这一点。相反,可以使用以下代码

while(1) {
        printf("Enter the number of the cell you want to insert X or O or enter -1 to exit: \n");
        scanf("%d", &position);

        printf("Type X or O: \n");
        scanf(" %c", &xORo);

        if(position < 0){
            break;
        }
        if((position > 9) && (xORo !='X') && (xORo !='O'))
        {
            continue;
        }   
        else if((position > 0)&&(position < 9)&&(xORo =='X') && (xORo=='O'))
        {
            switch(position)
            {
                case 1: temp = xORo;
                        xORo = board[0][0];
                        board[0][0] = temp; 
                        break;
                case 2: temp = xORo;
                        xORo = board[0][1];
                        board[0][1] = temp; 
                        break;
                case 3: temp = xORo;
                        xORo = board[0][2];
                        board[0][2] = temp; 
                        break;
                case 4: temp = xORo;
                        xORo = board[1][0];
                        board[1][0] = temp; 
                        break;
                case 5: temp = xORo;
                        xORo = board[1][1];
                        board[1][1] = temp; 
                        break;
                case 6: temp = xORo;
                        xORo = board[1][2];
                        board[1][2] = temp; 
                        break;
                case 7: temp = xORo;
                        xORo = board[2][0];
                        board[2][0] = temp; 
                        break;
                case 8: temp = xORo;
                        xORo = board[2][1];
                        board[2][1] = temp; 
                        break;
                case 9: temp = xORo;
                        xORo = board[2][2];
                        board[2][2] = temp; 
                        break;
            }
            PrintBoard(3, 3, board);
        }

    }
}
while(1){
printf(“输入要插入X或O的单元格编号,或输入-1退出:\n”);
扫描频率(“%d”,位置(&P);
printf(“X型或O型:\n”);
scanf(“%c”和&xORo);
如果(位置<0){
打破
}
如果((位置>9)&&(xORo!='X')&&(xORo!='O'))
{
持续
}   
如果((位置>0)和&(位置<9)和&(xORo=='X')&(xORo=='O'))
{
开关(位置)
{
情况1:temp=xORo;
xORo=板[0][0];
板[0][0]=温度;
打破
案例2:temp=xORo;
xORo=板[0][1];
板[0][1]=温度;
打破
案例3:temp=xORo;
xORo=板[0][2];
板[0][2]=温度;
打破
案例4:temp=xORo;
xORo=董事会[1][0];
板[1][0]=温度;
打破
案例5:temp=xORo;
xORo=董事会[1][1];
板[1][1]=温度;
打破
案例6:temp=xORo;
xORo=董事会[1][2];
板[1][2]=温度;
打破
案例7:temp=xORo;
xORo=董事会[2][0];
板[2][0]=温度;
打破
案例8:temp=xORo;
xORo=董事会[2][1];
板[2][1]=温度;
打破
案例9:temp=xORo;
xORo=董事会[2][2];
板[2][2]=温度;
打破
}
印刷电路板(3,3,电路板);
}
}
}
如果((位置>9)和&xORo!=('X')&&('O'))
应该
while(1) {
        printf("Enter the number of the cell you want to insert X or O or enter -1 to exit: \n");
        scanf("%d", &position);

        printf("Type X or O: \n");
        scanf(" %c", &xORo);

        if(position < 0){
            break;
        }
        if((position > 9) && (xORo !='X') && (xORo !='O'))
        {
            continue;
        }   
        else if((position > 0)&&(position < 9)&&(xORo =='X') && (xORo=='O'))
        {
            switch(position)
            {
                case 1: temp = xORo;
                        xORo = board[0][0];
                        board[0][0] = temp; 
                        break;
                case 2: temp = xORo;
                        xORo = board[0][1];
                        board[0][1] = temp; 
                        break;
                case 3: temp = xORo;
                        xORo = board[0][2];
                        board[0][2] = temp; 
                        break;
                case 4: temp = xORo;
                        xORo = board[1][0];
                        board[1][0] = temp; 
                        break;
                case 5: temp = xORo;
                        xORo = board[1][1];
                        board[1][1] = temp; 
                        break;
                case 6: temp = xORo;
                        xORo = board[1][2];
                        board[1][2] = temp; 
                        break;
                case 7: temp = xORo;
                        xORo = board[2][0];
                        board[2][0] = temp; 
                        break;
                case 8: temp = xORo;
                        xORo = board[2][1];
                        board[2][1] = temp; 
                        break;
                case 9: temp = xORo;
                        xORo = board[2][2];
                        board[2][2] = temp; 
                        break;
            }
            PrintBoard(3, 3, board);
        }

    }
}