如果输入既不是字符c
也不是h
,我想给出错误消息,但我无法让它工作!我查了一些其他答案,但他们大多使用我根本不理解的throw
/ catch
方法。我刚开始编程和错误处理在第20章或第21章。尽可能以最简单的方式帮助我。
这是我尝试过的:
cout << "Enter 'c'(even) or 'h'(odd): ";
cin >> your_guess;
if((your_guess != ('c' || 'h')) == false) {
cout << "Wrong Input. Game is restarting... " << endl;
// restart the game ...
}
但它总是说Wrong Input. ...
。
答案 0 :(得分:6)
(your_guess != ('c' || 'h')) == false
错了。 ('c' || 'h')
只评估为true
。 built-in operator||
需要两个bool
个参数:
bool operator||(bool, bool)
由于'c'
和'h'
都不是NUL
个字符,因此会转换为true
。
true
或true
是true
。该语言不会创建一些魔法实体,您可以operator==
/ operator!=
与char
一起查看该角色是否属于您的#&# 39;已列出。
然后,稍后将bool和char提升为int
以进行不等式检查。我猜your_guess
不等于1
。我不是'1'
(ASCII 49
),而是1
(ASCII 1
)。所以你已经有效地写了if(true)
...
你的意思是:
(your_guess != 'c' || your_guess != 'h') == false
或
!(your_guess != 'c' || your_guess != 'h')
或
your_guess == 'c' && your_guess == 'h' // your_guess equal 'c' and 'h' at once?
现在您看到逻辑错误。
条件的正确代码是以下其中之一:
your_guess != 'c' && your_guess != 'h'
!(your_guess == 'c' || your_guess == 'h')
它只是De Morgan's laws。
如果以上内容对您来说并不简单,您可以使用switch
(因为您可能仍会使用它)。但是每个case
测试变量对编译时常量。
如果您要检查的字母存储在变量中,我建议:
std::string valid_characters = "ch"; // this will be our "magical entity"
if(valid_characters.find(your_guess) == std::string::npos)
{
// you have entered a character that is not 'c' nor 'h'
}
答案 1 :(得分:1)
你可以尝试
switch(your_guess){
case 'c' :
case 'h' :
// do something
break;
default :
cout<<"invalid Input"<<endl;
break;
}
答案 2 :(得分:0)
如果您在c ++中执行错误消息,除了更改之外,您可能需要考虑使用cerr而不是cout:
your_guess!=('c'||'h'))==false
到其他答案中列出的正确表格之一