2014-11-03 56 views
-3

我在获取要在主函数中打印的ROBX和ROBY变量时遇到了问题。这是我的程序的一小部分,我不知道我做错了什么。谢谢!使用main函数中后面的函数中的变量C

#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; 
     } 
} 
+0

那么你得到的错误是什么。 – Falmarri 2014-11-03 21:10:33

+4

是不是你的程序应该在某个时候调用'robot()'函数? – 2014-11-03 21:10:44

+0

逗号操作员如何工作? http://stackoverflow.com/questions/54142/how-does-the-comma-operator-work] – Elazar 2014-11-03 21:11:13

回答

2

您的代码有几个问题。

一件事,你永远不会调用robot,所以没有那些修改您的变量都发生。

另一个原因是,你不能从一个函数返回多个值:行return ROBX, ROBY;没有做什么你觉得它在做什么。

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

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

  1. 不要创建局部变量,不传递参数。只需直接修改全局变量即可。
  2. 仍然不会创建局部变量,并使您的功能接受两个int *参数。这将允许您在调用robot时传入全局变量,以便您可以持久地修改这些参数。有关更多详细信息,请参见this问题。

在这两种情况下,你将需要真正通话robot功能。