bool判断中的“!”陷阱

来源:互联网 发布:java 神经网络 开源 编辑:程序博客网 时间:2024/05/16 19:18

 

在使用bool表达式中“非”的语法时,我们常常不自觉的陷入一些表面上看似无懈可击,但实际运行结果却不是我们想要的糟糕情况。这往往是因为想当然的逻辑错误,当然罪魁祸首还是“!”这个符号!使用它常常会让我们无意识的犯这些错误!很多人的观点在英语中not会使一件事情变的不容易明白。同样地,“not”操作符!也会使c++程序难以理解。

 

 

解决bool"!" 陷阱目前有俩个途径:

 

 

1、正确使用操作符“!”使用时,一定要用圆括号来封闭需要求反的参数。同时在逻辑上进行下确认!

 

 

 

2、彻底避免使用操作符!

 

 

 

下面是我在实际过程中遇到的问题,给我了这个体会!

其中我将if的bool条件给写成了这样:

其结果可想而知!不停的goto,程序无法顺利执行下去

具体bool分析下:

输入的是A
am_or_pm != 'A'  为T
am_or_pm !='a' 为F
(am_or_pm != 'A' ||am_or_pm !='a') 为T
(am_or_pm != 'P' || am_or_pm != 'p') 为F
那么最后
(am_or_pm != 'A' ||am_or_pm !='a')||(am_or_pm != 'P' || am_or_pm != 'p')应该为 T 所以一直执行...

 

如果把条件用摩根定律转换下:!(am_or_pm == 'A' && am_or_pm =='a' && am_or_pm == 'P' && am_or_pm == 'p')

这样就不会继续错误了,其中之所以这样关键是!= 这个否定操作符!

下面是完整代码!

 

当然,你完全不必刻意的避免操作符!,但是用它之前,确实应该想一想,是否能在不使用!的前提下,更清楚地表示同一件事情
最后经过思考后 发现也可以化解下改用另一种语法有效的简化bool判断 这样就更容易避免错误了。

下面这个是改用while switch case语句后省掉了繁杂的bool判断程序的可读性大大增强。事实说明“!”这个否定的操作符确实会让事情复杂化。为了应对这一情况还是建议避免使用

 

最后的最后不得不说一点离散数学是有必要的!看来的好好听课了!

 

 

 

原创粉丝点击