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
的数组,将您的汽车放入其中,然后仅使用strcpycars[randNum]
@robolisk这是一个很弱的设计,因为没有检查缓冲区溢出(这样做会很痛苦)