2014-11-03 47 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功能。