bool判斷中的「!」陷阱

2021-05-25 05:15:35 字數 1063 閱讀 3806

在使用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判斷程式的可讀性大大增強。事實說明「!」這個否定的操作符確實會讓事情複雜化。為了應對這一情況還是建議避免使用

最後的最後不得不說一點離散數學是有必要的!看來的好好聽課了!

C 中BOOL 與bool的區別

bool 定義 typedef int bool define false 0 define true 1 不能完全過載,如 file.h void f int ok void f bool ok file.cpp void f int ok void f bool 錯誤,重新宣告 而bool fa...

vc中bool與BOOL的區別

bool是微軟定義的typedef int bool。與bool不同,它是乙個三值邏輯,true false error,返回值為大於零的整數為true,0為false,1為error。win32 api中很多返回值為bool的函式都是三值邏輯。比如getmessage bool是標準c 資料型別,...

c 中BOOL和bool的區別

1 型別不同 bool為int型 bool為布林型 2 長度不同 bool只有乙個位元組 bool長度視實際環境來定,一般可認為是4個位元組 3 取值不同 bool取值false和true,是0和1的區別 bool取值false和true,是0和非0的區別二 bool是標準c 資料型別,可取值tru...