返回一个带有随机选项和局部变量的 char 函数

return a char function with random options and local variables

本文关键字:选项 局部变量 函数 char 随机 一个 返回      更新时间:2023-10-16

我创建了一个单元测试工具来测试我的程序。我希望它能够随机测试每次运行,但我不确定如何做到这一点。这是我的想法,但我陷入了下一步该怎么做,任何指导将不胜感激。

int main (void)
{
  int testNumber = 1; //for testing
  char carName[] = "";
  double carCost = 0;
  carName = carChosen (testNumber);
  carCost = assessCost (carName); //assessCost takes in the car name and checks what cost of the car will be (error checking so only certain cars can be chosen)
  return 0;
}

"testNumber"通常会随着时间的推移而播种,以创建从 1 到 15 的不同数字,但在这种情况下,它将是"1"进行测试。

这是我遇到麻烦的下一点。在此函数中,将有 15 种不同的汽车选项,它将根据随机创建的数字返回一个。

char carChosen (int randNum)
{
  char carOne[] = "Honda";
  char carTwo[] = "Ford";
  if (randNum == 1)
  {
    return carOne; //local variables, not going to work...
  }
  else if (randNum == 2)
  {
    return carTwo; // Again, these return's are here to better represent what I'm trying to create but failing to do so..
  }
}

我知道您不能返回局部变量,我该怎么办?

void carChosen (int randNum, char * out)
{
  char carOne[] = "Honda";
  char carTwo[] = "Ford";
  if (randNum == 1)
  {
    strcpy(out, carOne); 
  }
  else if (randNum == 2)
  {
     strcpy(out, carTwo); 
  } //.. handle other cases
}

呼叫喜欢

  char carName[MAX_LEN];
  carChosen (testNumber, carName);

此外,如果您有很多条件要测试,也许最好使用 switch 而不是嵌套if..else

我以为是C在看代码,如果你使用C++,你可以从你的函数中返回std::string对象而没有任何问题。

正如其他人指出的那样,您的代码看起来像 C 代码。 如果你想使用C++,那么请阅读std::string并使用它。

如果你想继续你的方法(这在很大程度上是一种类似C的方法),那么你需要更好地了解C字符串是如何工作的。 即,它们如何存储在内存中以及charchar *有何不同与char array[]不同。

现在把大部分放在一边,我基于您的示例代码的第一个猜测是,您实际上不会修改字符串的内容。 您只需要字符串的内容,但不会更改它们。 如果这是准确的,则可以使用常规char *变量来保存指向字符字符串的指针。 您只需要一个字符串副本,因此您可以传递指向该副本的指针,每个人都可以从该指针读取。 执行此操作的一种快速方法是直接使用字符串文本。

const char* carChosen (int randNum)
{
  if (randNum == 1)
  {
    return "Honda";
  }
  else if (randNum == 2)
  {
    return "Ford";
  } 
  else 
  {
    return "Audi";
  }
}

请注意,我们将返回一个const char *const只是指示我们不会修改指向的字符串。 我们绝对不想这样做,因为它指向字符串文字(不允许修改)。 一旦你得到了carSelected返回const char *,你可以将其传递给其他函数,例如assessmentCost。