我是C ++的新手,正在创建一个简单的文本RPG,无论如何,场景是我有一个选择1-3的“欢迎”屏幕,并有一个简单的IF语句来检查它们,在这里:
int choice;
std::cout << "--> ";
std::cin >> choice;
if(choice == 1) {
//..
这样可以正常工作,但如果有人输入一个字母作为选择(而不是1,2或3),它将变成“-392493492”或其他东西并使程序崩溃。所以我想出了:
char choice;
std::cout << "--> ";
std::cin >> choice;
if(choice == 1) {
//..
这种方法很好,但是当我输入一个数字时,它似乎完全跳过了IF语句。字符“1”是否与数字1相同?
我得到了一个编译器错误(ISO-CPP或其他东西):
if(choice == "1")
那么我怎么看他们是否正确输入了1-3?
答案 0 :(得分:3)
1 is an int
'1' is a char
"1" is a char array
我想你想与'1'
进行比较。
答案 1 :(得分:3)
选择不会变成“-392493492”或其他东西,它以该值开始(您没有初始化它,因此初始值未指定)并且永远不会设置为其他任何因为>>
失败。您应该检查这些运算符是否成功,这很容易做到:
if (std::cin >> choice) {
switch (choice) {
case 1: // ...
case 2: // ...
case 2: // ...
default: // report error
}
}
答案 2 :(得分:2)
不幸的是1
和'1'
不一样。
查找您最喜欢的ASCII表以了解代表字符“1”的整数值,您将自己看到它:'1'
映射到49
。
此代码存在另一个问题""
表示C字符串(const char*
),而''
表示单个字符。
以下是您的代码重做:
char choice = 0;
if (cin >> choice) // check success
{
switch(choice) // choose
{
case '1': { /**/ break; }
case '2': { /**/ break; }
case '3': { /**/ break; }
default:
cout << choice
<< " is not a valid choice, please press 1, 2 or 3 and Enter"
<< endl;
}
}
我切换到切换,因为它比通用枚举的else-if
链更自然。
答案 3 :(得分:1)
if(choice == '1')
要回答你的问题,1的ascii值不等于1,但等于49:
'1' == 49
答案 4 :(得分:1)
双引号中的值被解释为字符串(类型为char*
,与char
不兼容),而在单引号中则被解释为char:
if(choice == '1')
char '1'
的整数表示不是1,而是49(在ASCII中)。所以你也可以写
if(choice == 49)
此外,您应该有一个else
分支来显示错误消息或其他内容,并阻止程序在输入无效输入时继续。
答案 5 :(得分:1)
choice是一个char,所以你应该使用'1'来检查。 “1”表示其中包含1个字符的字符串。