C ++如何使一个函数只运行一个

时间:2018-01-10 18:09:05

标签: c++ random clr

我在Visual Studio 2017中使用C ++ \ CLR项目。当我尝试操作内存时,我创建了一个无名游戏的黑客并尝试操纵游戏。

我的问题是我尝试创建一个随机整数,为此我将函数CREATE NONCLUSTERED INDEX FINullDateCol ON <myTable> (DateCol) WHERE DateCol IS NULL ; GO 与firstSetRand rand()结合使用。

srand()

这是我的随机计数功能,在这里我称之为:

using namespace System;

    int * randomName()
        {
    srand((unsigned)time(0));
        int i = 1;
        static int name[5];
        for (int i = 1; i < 5; i++)
            {
                name[i] = 97 + rand() % 122;
            }
            std::cout << name << std::endl;
            return name;
        }

问题是因为这是一个while(true)循环,我多次调用该函数。并且我不知道如何使int main(array<System::String ^> ^args) { while (true) { switch (inputCheat) //check which case match with the user input { case 4: Console::WriteLine("test: "); random:: randomName(firstSetRand); //WriteProcessMemory(handle, (LPVOID)localName, &inputNumber, sizeof(), NULL); //Write to the local adress memory and change the value Console::WriteLine("\nWhat did you want to cheat up: "); break; } } Sleep(200); } 函数仅在我得到相同的随机数时被调用。

我来自Java。在Java中,我会在一个类中完成整个代码,而不是在构造函数中编写变量,但我认为在C ++中这是不可能的。因为当我在一个类中执行整个代码时,我得到错误:

srand()

以下是我的项目的完整代码:

Severity Code Description Project File Line Suppression State
Error LNK2019 unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) AssaultCubeHack C:\Users\schup\source\repos\AssaultCubeHack\AssaultCubeHack\MSVCRTD.lib(exe_main.obj)   1

enter image description here

在这里你可以看到它不起作用。

2 个答案:

答案 0 :(得分:2)

解决方案1 ​​

您可以使用函数static变量。

static bool firstTime = true;
if ( firstTime )
{
    srand((unsigned)time(0));
    firstTime = false;
}

解决方案2

如果您不想为每次调用函数支付支票的价格,您可以使用帮助程序类/结构。

struct InitRandHelper
{
   InitRandHelper() { srand((unsigned)time(0)); }
};


int* randomName()
{
   // Initialize the random number generator.
   static InitRandHelper init;

   int i = 1;
   static int name[5];
   for (int i = 1; i < 5; i++)
   {
      name[i] = 97 + rand() % 122;
   }
   std::cout << name << std::endl;
   return name;
}

解决方案3

srand循环开始之前调用main中的while

int main(array<System::String ^> ^args)
{
   srand((unsigned)time(0));

   while (true)
   {
      switch (inputCheat)   //check which case match with the user input
      {
         case 4:
            Console::WriteLine("test: ");
            random:: randomName(firstSetRand);
            //WriteProcessMemory(handle, (LPVOID)localName, &inputNumber, sizeof(), NULL); //Write to the local adress memory and change the value
            Console::WriteLine("\nWhat did you want to cheat up: ");
            break;
      }
   }
   Sleep(200);
}

并从random::randomName移除来电。

答案 1 :(得分:0)

好的,我找到了答案。问题是这一行:

 std::cout << name << std::endl;

控制台中的输出不是值,而是来自阵列的地址。为了做到这一点,我必须这样做:

    int i = 1;
       static int name[5];
       for (int i = 1; i < 5; i++)
       {
          name[i] = 97 + rand() % 122;
          std::cout << name[i] << std::endl; //this line is the right thing to do it
       }
       return name;