gpt4 book ai didi

c++ - 在if语句中将多个字符变量转换为数字

转载 作者:行者123 更新时间:2023-11-30 01:34:38 25 4
gpt4 key购买 nike

我正在尝试使用“if”语句将用户输入的单词(黑色、红色、绿色、蓝色)更改为整数(1、2、3、4)。对编程很陌生,所以欢迎任何解释。下面的代码告诉我“与字符串文字的比较导致未指定的行为”并且总是转到“其他”因素,给我 4。

声明的变量:

int calccol = 0;
char usercol[5];

用户输入颜色选择:

std::cout << "Pick a color: " ;
std::cout << "\n Black \n Red \n Green \n Blue \nYour color choice: " ;
std::cin >> usercol ;

失败的 if 语句:

if (usercol == "black") {
calccol = calccol + 1;
} else if (usercol == "red") {
calccol = calccol + 2;
} else if (usercol == "green"){
calccol = calccol + 3;
} else {
calccol = calccol + 4;
} ;

std::cout << calccol ;

当用户输入单词“green”时,我希望 calccol 值例如为 3。

最佳答案

你不能像这样比较 char* 是否相等。您必须使用 strcmp 并查看结果是否为 0。但既然这是 C++,为什么不使用 std::string 呢?只需更改此行:

char usercol[5];

对此:

std::string usercol;

它按预期工作。


以下是它如何使用 C 风格的字符串:首先,您需要确保缓冲区足够大,这在以前是不够的:

char usercol[10]; // has to be big enough to hold the choice

在此示例中,它的大小为 10,输入的文本为 9,表示字符串结尾的空终止符为 1。一个问题是(可能是恶意的)用户可能输入更大的字符串,导致缓冲区溢出,这是未定义的行为,可能会导致内存损坏。需要更复杂的解决方法来防止这种情况,请参阅 this answer举个例子。

接下来,您需要修复比较。 usercol == "black" 将不起作用,因为它将缓冲区的地址与程序可执行文件中的硬编码 "black" 的地址进行比较。他们永远不会匹配。相反,strcmp必须这样使用:

if (!strcmp(usercol, "black")) {...
如果字符串相等,

strcmp 返回 0,否则返回其他值。这些将分别隐式转换为 falsetrue。通过在它前面添加 ! 来反转它。这给了我们想要的结果: if (!strcmp(usercol, "black")) is true 如果 usercol 的字符串内容是与 "black" 中的一个相同。

关于c++ - 在if语句中将多个字符变量转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com