c - 在 main、C 中使用后面函数中的变量

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

最佳答案

您的代码存在几个问题。

一方面,您永远不会调用robot,因此不会发生对变量的任何修改。

另一方面,您不允许从函数返回多个值:return ROBX, ROBY; 行并未执行您认为它正在执行的操作。

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

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

  1. 不要创建局部变量,也不要传递参数。直接修改全局变量即可。
  2. 仍然不要创建局部变量,并让您的函数接受两个 int * 参数。这将允许您在调用robot时传入全局变量,以便您可以以持久的方式修改这些参数。请参阅this询问更多详情。

无论哪种情况,您都需要实际调用您的机器人函数。

关于c - 在 main、C 中使用后面函数中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723240/

相关文章:

c++ - 我想在主程序的函数中使用变量集,但是在声明变量时出错

java - Java 中的 printf() 功能与 CharBuffer 或类似的东西相结合

c++ - 如何从 snprintf() 获得 -1

c - printf 语句是如何解释的?

c - 用宏函数替换 C 中的函数

javascript - 使用 Javascript 函数将 HTML 写入屏幕

c - VS2017 打开文件夹 - 在 tasks.vs.json 中配置 'Compile C' 上下文?

c++ - 使用 boost:bind 绑定(bind)一个 std::function

c - 有没有办法将函数的使用限制在 C 中的库中?

c - 在 C 中正确处理平台细节(unix/windows)?