我想检查对角线上的所有方框是否具有相同的值。以下是我尝试这样做的方法:
thisOne = board[0][2]; //set to 'X'
for(i = 0; i<3; i++) {
for(j = 3; j>0; j--){
if(board[i][j-1] != thisOne) {
thisOne= '\0';
}
}
}
//since all boxes were 'X', thisOne is still set to 'X'
if(thisOne != '\0') {
winner = thisOne;
printf("vinnare på nördöst\n");
}
因此,运行此代码后,winner
应该是&#39; X&#39;,如果所有框都是X&#39; s。但是代码不这样做,为什么呢?
答案 0 :(得分:1)
当检索到第一个不匹配的char时,您没有打破/退出检查循环。
此外你的嵌套是不是你猜的:内部的一个循环进入每一行的所有列,但你只想对角线值......
您可以轻松地使用简单的while
int i=0;
int j=2;
while ((i<3) && (j>=0) && (board[i][j] == thisOne))
{
i++;
j--;
}
// if i<3 the diagonal is not full of thisOne char
if ( i < 3)
{
}
答案 1 :(得分:1)
您只需要检查对角线单元格而不是检查所有单元格。
答案 2 :(得分:1)
正如@BLUEPIXY所说,问题是i
循环嵌套在i
循环中。因此,对于j
循环中的每次迭代,i
循环在每列上运行3次,而不是仅仅处理次要对角线。有几种方法可以解决这个问题,尽管最佳方法是只使用一个循环而只使用一个变量for(i=0;i<3;i++) {
if(board[i][2-i]!=thisOne) {
thisOne='\0'
break;
}
}
。
ranges$x
答案 3 :(得分:0)
为了实现你的目标,你只需要递减X迭代器和放大器。通过你的数组时的Y迭代器。
这是一个简单的例子:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int arr[3][3];
int it_y;
int it_x;
it_y = 0;
it_x = 2;
arr[0][0] = 0;
arr[0][1] = 1;
arr[0][2] = 2;
arr[1][0] = 3;
arr[1][1] = 4;
arr[1][2] = 5;
arr[2][0] = 6;
arr[2][1] = 7;
arr[2][2] = 8;
while (it_x < 3 && it_x >= 0)
{
printf("[%d][%d]: '%d'\n", it_y, it_x, arr[it_y][it_x]);
--it_x;
++it_y;
}
return EXIT_SUCCESS;
}
答案 4 :(得分:0)
你可以这样做
for(int row=0,col=2; row<3; row++,col--)
{
if(board[row][col] != thisOne)
{
thisOne= '\0';
}
}
答案 5 :(得分:0)
你只能检查这样的对角线元素
for(i = 0, j = 3-1; i < 3; i++, j--) {
if(board[i][j] != thisOne) {
thisOne = '\0';
}
}