C代码几乎不需要帮助

  • 本文关键字:不需要 帮助 代码 c
  • 更新时间 :
  • 英文 :


您好,我正在研究带有单个红外传感器的线路跟随机器人。

我已获得模拟客户端+硬件。我现在正在尝试模拟部分,其中我必须沿着有效路径移动机器人,直到我在迷宫中找到令牌。然后停止并给出坐标 x, y,如下所示:"在 x , y 上找到令牌"。坐标由服务器应用程序基于全局坐标系(例如东、西...您的机器人具有局部坐标系(例如,向左、向右、向前......在开始时选择机器人的方向并在屏幕上显示实际坐标太。在发送到服务器应用程序的每个动作之前,屏幕上都会发出对机器人方向进行必要的校正("向左","向前","向右","转身"),然后将坐标发送到服务器。例:欢迎来到模拟市民机器人在十字路口: 3, 5朝向:南机器人移动:向左移动机器人转到: 4 , 5...发现令牌: 2 , 1

有两种

方法可以在本地或远程服务器上模拟程序,在本地机器上我可以看到迷宫,但在远程服务器上总是给我未知的迷宫。

我有两个C文件

roboproxy.c

    #include <stdarg.h>
#include "../h/RobotProxy.h"
/// initialized with ROBOT_FAIL
int currentIntersection = ROBOT_FAIL;
#if !defined(vasprintf)
static int vasprintf(char **s, const char *format, va_list ap) {
    /* Guess we need no more than 100 bytes. */
    int n, size = 100;
    va_list save_ap;
    if ((*s = (char*) malloc(size)) == NULL)
        return -1;
    while (1) {
        /* work on a copy of the va_list because of a bug
         in the vsnprintf implementation in x86_64 libc
         */
#ifdef __va_copy
        __va_copy(save_ap, ap);
#else
        save_ap = ap;
#endif
        /* Try to print in the allocated space. */
#ifdef _vsnprintf
        n = _vsnprintf(*s, size, format, save_ap);
#else
        n = vsnprintf(*s, size, format, save_ap);
#endif
        va_end(save_ap);
        /* If that worked, return the string. */
        if (n > -1 && n < size) {
            return n;
        }
        /* Else try again with more space. */
        if (n > -1) { /* glibc 2.1 */
            size = n + 1; /* precisely what is needed */
        } else { /* glibc 2.0 */
            size *= 2; /* twice the old size */
        }
        if ((*s = (char*) realloc(*s, size)) == NULL) {
            return -1;
        }
    }
}
#endif
#if !defined(asprintf)
static int asprintf(char **s, const char *format, ...) {
    va_list vals;
    int result;
    va_start(vals, format);
    result = vasprintf(s, format, vals);
    va_end(vals);
    return result;
}
#endif
/// Set the robot to the specified position
/// @ returns ROBOT_SUCCESS, ROBOT_FAIL or ROBOT_TOKENFOUND
int Robot_Move(int x, int y) {
    char* buffer;
    asprintf(&buffer, "{"x":%d,"y":%d}", x, y);
    char* query = url_encode(buffer);
    free(buffer);
    char* response = sendAndRecieve(concat(URL, query));
    if (response == NULL) {
        puts("Connection to server failed!");
        return ROBOT_FAIL;
    }
    if (contains(response, ""code":1")) {
        puts("Connection declined!");
        return ROBOT_FAIL;
    }
    if (contains(response, ""code":2")) {
        puts("Connection blocked!");
        return ROBOT_FAIL;
    }
    if (contains(response, ""code":3")) {
        printf("Invalid position! (x=%d, y=%d)n", x, y);
        return ROBOT_FAIL;
    }
    int foundIntersection = 0;
    bool token = false;
    if (contains(response, ""north":true"))
        foundIntersection |= D_N;
    if (contains(response, ""east":true"))
        foundIntersection |= D_E;
    if (contains(response, ""south":true"))
        foundIntersection |= D_S;
    if (contains(response, ""west":true"))
        foundIntersection |= D_W;
    if (contains(response, ""token":true"))
        token = true;
    free(query);
    currentIntersection = foundIntersection;
    if (token)
        return ROBOT_TOKENFOUND;
    return ROBOT_SUCCESS;
}
/// Get the intersections of the current node that the robot is at
/// @ returns always the intersection at position x=0,y=0 if Robot_Move was not called first
int Robot_GetIntersections() {
    if (currentIntersection == ROBOT_FAIL)
        Robot_Move(0, 0);
    return currentIntersection;
}

Roboclientsim.C

    #include "../h/Configuration.h"
int main(void) {
    printf("Token: %dn", Robot_Move(1, 0));
    printf("Intersection: %dn", Robot_GetIntersections());
    return EXIT_SUCCESS;
}

当我在控制台中运行程序时,它给了我令牌是 1,然后在找到任何令牌后它将变为 2。

所以在roboclientsim.c中,我添加了"

 If (Robot_Move()==2) //as Robot_move is returning the %d value for Token
printf("another token found ");

"

但是我的编译器给出了很少有人为robot_move争论的问题,

谁能帮我解决这个问题?

Robot_Move需要 2 个参数:

int Robot_Move(int x, int y);

你没有任何争论地称呼它。

If (Robot_Move()==2)

这就是错误。我怀疑你想做的是:

int main(void) {
    int token = Robot_Move(1, 0);
    printf("Token: %dn", token);
    printf("Intersection: %dn", Robot_GetIntersections());
    if (token == 2) 
       printf("another token found ");
    return EXIT_SUCCESS;
}

或者也许:

int main(void) {
    int token = Robot_Move(1, 0);
    if (token == 2) {
       printf("Token: %dn", token);
       printf("Intersection: %dn", Robot_GetIntersections());
    } else {
       printf("another token found ");
    }
    return EXIT_SUCCESS;
}

检查方法的原型 int Robot_Move(int x, int y)调用时需要提供 2 个参数。

最新更新