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

时间:2014-11-03 21:08:47

标签: 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, 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;
        }
}

1 个答案:

答案 0 :(得分:2)

您的代码存在一些问题。

首先,你永远不会打电话给robot,所以这些修改都不会发生。

另一方面,您不允许从函数返回多个值:行return ROBX, ROBY;没有按照您的想法行事。

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

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

  1. 不要创建局部变量并且不传递参数。只需直接修改全局变量即可。
  2. 仍然没有创建局部变量,并使您的函数接受两个int *参数。这将允许您在调用robot时传入全局变量,因此您可以以持久的方式修改这些参数。有关详细信息,请参阅this问题。
  3. 在任何一种情况下,您都需要实际调用您的robot功能。