Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回带有随机选项和局部变量的char函数_C++_String_Pointers - Fatal编程技术网

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

C++ 返回带有随机选项和局部变量的char函数,c++,string,pointers,C++,String,Pointers,我已经创建了一个单元测试工具来测试我的程序。我希望它能够随机测试每一次跑步,但我不知道如何去做。这是我的想法,但我陷入了下一步该做什么的困境,任何指导都将不胜感激 int main (void) { int testNumber = 1; //for testing char carName[] = ""; double carCost = 0; carName = carChosen (testNumber); carCost = assessCost (carName)

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

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);
另外,如果您有许多条件要测试,那么使用
开关
而不是嵌套的
if..else
,可能会更好


<>我认为是C看代码,如果你使用C++,你可以从函数中返回<代码> STD::String < /Cord>对象,没有任何问题。正如其他人指出的,

< P>。如果您想使用C++,那么在STD::string上读取并使用它。 如果您想继续使用您的方法(这是一种非常类似C的方法),那么您需要更好地理解C字符串是如何工作的。也就是说,它们在内存中的存储方式以及
char
char*
的不同之处在于
char数组[]

现在暂且不谈这些,根据示例代码,我的第一个猜测是您实际上不会修改字符串的内容。您只需要字符串作为其内容,但不会更改它们。如果这是准确的,您可以使用常规
char*
变量来保存指向char字符串的指针。您只需要挂起字符串的一个副本,因此可以传递指向该副本的指针,每个人都可以从该指针读取。一种快速的方法是直接使用字符串文字

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

请注意,我们将返回一个
常量char*
const
只是表示我们不会修改指向的字符串。我们肯定不想这样做,因为它指向一个字符串文本(您不允许修改)。一旦您选择了car返回的
const char*
,您就可以将其传递给其他函数,例如assessCost。

您将返回值设置为
char
,然后尝试返回
char[]
。如果randNum与1&2@Robolisk如果C++代码是C++,那么C++代码看起来就像C.,只使用<代码> STD::String (在代码<主(空)< />代码>中删除<代码>空白>代码。@ Biffen是C++,我才开始熟悉它。我会调查一下这些能为我做些什么,谢谢you@Thomas我明白这一点,但我把它放在那里是因为我被卡住了,不知道还能做些什么来表达我的观点。你是对的,我只是为了测试而准备的,但良好的实践表明我应该这样做。谢谢你的建议。<代码> char CARNEY[] =“”/Cord>不是C++字符串,它是一个由字符组成的空终止字符数组,它由一个字符组成(很明显是空字符)。您可以更改此数组的内容,但由于它是静态分配为单个字符数组的,因此您可以对其执行的唯一操作是更改该单个字符(这显然会使其成为非空终止的字符数组)。简单地说,您需要阅读更多关于以null结尾的(C样式)字符串的内容。或者,如果你的指定语言是C++,那么使用<代码> STD::String ,它将是一个空洞,不是吗?比开关更好,一个2D字符数组,Giorgi Moniava的工作非常出色!谢谢@Thomas你说的第二个字符数组是什么意思?…>。>创建一个名为
cars
的数组,将您的汽车放入其中,然后仅使用strcpy
cars[randNum]
@robolisk这是一个很弱的设计,因为没有检查缓冲区溢出(这样做会很痛苦)