输出未显示我试图在全局声明数组中进行的更改

Posted

技术标签:

【中文标题】输出未显示我试图在全局声明数组中进行的更改【英文标题】:Output doesnt show the change i am trying to make in a globally declaread array 【发布时间】:2022-01-20 12:47:56 【问题描述】:

我正在尝试制作井字游戏。 我已经声明了这个字符类型的全局数组。

#include<stdio.h>
static char game[3][3]=' ',' ',' ',' ',' ',' ',' ',' ',' ';

然后我尝试根据游戏的条目来改变数组元素的值。

void input()

char row[1],column[1];
char move;
printf("\nEnter Position (Row×Column) and Your Move (X or O): 
\n");
scanf(" %c %c %c",&row[0],&column[0],&move);
temp++;
replace(row,column,move);

void replace(char r[1],char c[1],char m)

int i,j;
for(i=0;i<3;i++)

    for(j=0;j<3;j++)
    
        if(game[i]==r && game[j]==c)
        
            game[i][j]=m;
            break;
        
    


我将行和列变量更改为数组,因为我看到了“iso c++ 禁止在指针和整数 fpermissive 之间进行比较”的警告。 但我仍然无法在输出中看到所需数组元素的变化。我做错了什么?

【问题讨论】:

【参考方案1】:

您需要if (i == r &amp;&amp; j == c) 而不是if(game[i]==r &amp;&amp; game[j]==c)。您正在做的是比较 game[i][j] 处的字符是否等于 int r 和 int c。您没有检查玩家想要玩的位置(r,c)是否是(i,j)

另外,您的break;实际上不会让你脱离这两个循环。您需要在每个 for 循环中都有一个 if 语句来检查是否已找到该位置,因此在您的外循环中添加一个变量并对此进行额外检查将起作用。

    for(i = 0; i < 3; i++) 
        for(j = 0; j < 3; j++) 
            if (i == r && j == c) 
                game[i][j] = m;
                found = 1;
                break;
            
        
        if (found) break;
    

【讨论】:

非常感谢。我已经做了好几个小时了,一个接一个的错误不断出现,但现在已经完成了。谢谢

以上是关于输出未显示我试图在全局声明数组中进行的更改的主要内容,如果未能解决你的问题,请参考以下文章

cpp在声明全局2d数组时遇到问题

未找到 Bash 中的数组 [重复]

在c ++中全局声明的动态数组的多个定义[重复]

为啥在c ++中声明一个全局数组时,它可以给出的大小大于在main中声明它[重复]

C/c++中 数组全局变量的定义声明 与 引用声明

在 Swift 中声明任何类型的数组时使用未声明的类型“T”