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

时间:2016-01-27 09:12:07

标签: c++ string pointers

我已经创建了一个单元测试工具来测试我的程序。我希望它能够随机测试每次运行,但我不知道如何去做。这是我的想法,但我不知道下一步该做什么,任何指导都会非常感激。

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..
  }
}

我知道你不能返回局部变量,我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

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个对象而没有任何问题。

答案 1 :(得分:0)

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

如果你想继续你的方法(这是一种非常类似于C的方法),那么你需要更好地理解C字符串的工作方式。即,它们如何存储在内存中以及charchar *的不同之处与char array[]不同。

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

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

请注意,我们正在返回const char *const只表示我们不会修改指向的字符串。我们绝对不希望这样做,因为它指向一个字符串文字(你不允许修改)。获得carChosen返回的const char *后,您可以将其传递给其他功能,例如assessCost。