C 如何使用&;编写具有多个条件的if语句&;和| | |?
我正在做一个tic tac趾板游戏,我需要用户输入1到9之间的任何位置,然后输入X或O。我需要包括的一些条件是,我想限制用户输入任何大于9的数字,并且不输入任何大于“X”或“O”的字符。我遇到的问题是它没有遵循条件语句。任何帮助都将不胜感激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
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);
}
}
}