如何检查上次退货是否为当前退货

How to check if previous return is the current one?

本文关键字:是否 何检查 检查      更新时间:2023-10-16

我有以下代码:

编辑

....int l=0

char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
{ // I know the code looks disgusting but please ignore that as I am only testing now
    static char *szTemp1="";
    for(int i=0; i<loop; i++)
    {
        if(task[i][0]!=0)
        {
            sif (l==0) 
            {strcpy(chat_arg, task[i]);
            }
        else
            {strcpy(chat_arg, task[i+1]);
            }
        strcpy(task[i], "");
        if (szTemp1!="")
        {
            MessageBox(0, szTemp1, "szTemp Value", 0);
            MessageBox(0, chat_arg, "Initial Value", 0);
            return chat_arg != szTemp1 ? chat_arg : NULL;
        } else {
            l++;
            szTemp1 = chat_arg;
            MessageBox(0, szTemp1, "szTemp1 Value", 0); // @execute 
            return chat_arg;
        }
        }
        strcpy(chat_arg, "");
    }
    return false;
}

编辑

我试图做的是让返回序列检查以前的返回值,如果它与当前值不相同,则返回当前值chat_arg,如果是,则返回NULL。

此函数的目的是从global_chat获取用户提示。提示的一个例子是!create <game-type> <game-time> <max-players>

该提示将分别由每个单词enter(在每个空格后)存储到task[][]数组中。

从那时起,这个功能就发挥了作用。它应该将当前任务值(当前单词)复制到chat_arg变量中。

出于某种原因,我遇到的问题是我主游戏循环中的每一个。chat_arg的值在整个游戏循环中保持不变。我想清除这个值。我已经想出了这个方法,我将检查函数中的当前值是否与前一个值相同,如果是,则返回NULL(清除值),如果不是,则没有理由清除前一个,因此返回当前值。

有人能为我做这项检查提供更好或改进的方法吗?或者有人能告诉我如何从内存中获取以前的返回值,并将其与当前值进行比较吗?谢谢!

1)将C++标记添加到您的帖子中,因为它不是纯C代码。

for(int i=0; i < loop; i++) // This line will not compile using C compilers.

2) 最好在下面的行中返回0false与您期望的char*不匹配。

return false; -> return 0;

我的解决方案:

1) 创建全局变量并将本地chat_arg与之进行比较。

extern char* g_prev_chat_arg = 0;
...
char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)
{
...
    //return chat_arg != /*previous return value*/ ? chat_arg : NULL;
    if (0 == strcmp(chat_arg, g_prev_chat_arg))
    {
        return 0;
    }
    else
    {
        g_prev_chat_arg = chat_arg;
        return chat_arg;
    }
...
}

2) 在函数char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)中创建本地static变量,并像上面一样使用它,

3) 将上次从char* FantasiaGameUtils::GetCurrentTask(char *chat_arg)返回的值存储在代码中的某个位置,然后在每次调用GetCurrentTask(...) 时传递它

char* FantasiaGameUtils::GetCurrentTask(const char* prev_chat_arg, char* chat_arg)