使用main,C中后面函数中的变量

使用main,C中后面函数中的变量,c,function,printf,C,Function,Printf,我很难在主函数中打印ROBX和ROBY变量。这只是我计划的一小部分,我不知道我做错了什么。谢谢 #include <stdio.h> #include <time.h> #define ROW 8 #define COLUMN 8 int robot (int m[ROW][COLUMN], int ROBX, int ROBY); int ROBX; int ROBY; int main(void) { printf("%d %d\n", ROBX, ROB

我很难在主函数中打印ROBX和ROBY变量。这只是我计划的一小部分,我不知道我做错了什么。谢谢

#include <stdio.h>
#include <time.h>
#define ROW 8
#define COLUMN 8

int robot (int m[ROW][COLUMN], int ROBX, int ROBY);
int ROBX;
int ROBY;

int main(void)
{
    printf("%d %d\n", ROBX, ROBY);
    return 0;
}
int robot (int m[ROW][COLUMN], int ROBX, int ROBY)
{   
    // ensure different output each time program is run
    srand ( time(NULL) );    
        // Pick a random spot to place the robot
        int placed = 0;
        int ROBX;
        int ROBY;
        while(placed == 0) 
        {
            int t = rand() % ROW;
            int y = rand() % COLUMN;
            if(m[t][y] == 0) 
            {
                m[t][y] = -2;
                placed = 1;
                ROBX = t;
                ROBY = y;
            }
            return ROBX, ROBY;
        }
}
#包括
#包括
#定义第8行
#定义第8列
int robot(int m[行][列]、int ROBX、int ROBY);
int-ROBX;
内罗比;
内部主(空)
{
printf(“%d%d\n”,ROBX,ROBY);
返回0;
}
int robot(int m[行][列],int ROBX,int ROBY)
{   
//确保每次运行程序时都有不同的输出
srand(时间(空));
//选择一个随机点来放置机器人
int=0;
int-ROBX;
内罗比;
while(placed==0)
{
int t=rand()%行;
int y=rand()%列;
如果(m[t][y]==0)
{
m[t][y]=-2;
放置=1;
ROBX=t;
ROBY=y;
}
返回ROBX,ROBY;
}
}

您的代码有几个问题

首先,您从不调用
robot
,因此对变量的任何修改都不会发生

另一方面,不允许从函数返回多个值:行
returnrobx,ROBY没有做您认为它正在做的事情

最后,您的函数没有多大意义。您打算将
ROBX
ROBY
作为参数传入。这不会像你想象的那样奏效,但总的来说这不是一个糟糕的主意。但是当您创建局部变量时,也被称为
ROBX
ROBY
。正如评论者所指出的,这将隐藏全局变量和参数,因此最终只修改那些本地定义的变量

有两种方法可以解决此问题:

  • 不要创建局部变量,也不要传递参数。只需直接修改全局变量
  • 仍然不要创建局部变量,让函数接受两个
    int*
    参数。这将允许您在调用
    robot
    时传入全局变量,以便您可以持久地修改这些参数。有关更多详细信息,请参阅问题

  • 在这两种情况下,您都需要实际调用
    robot
    函数。

    那么您会遇到什么错误。您的程序不应该在某个时候调用
    robot()
    函数吗?逗号操作符是如何工作的<代码>int-ROBX;内罗比robot()
    中的code>隐藏这些变量的全局定义<代码>返回ROBX,ROBY不会做你认为它会做的事情。