似乎語法格式和用法都很簡單,但是實際使用過程中可能就不是那回事了。下面示例來自於網友提問:下面的**無論陣列值如何變化,輸出結果最多就到「執行5」,之後的分支永遠無法執行。
sub demo1(
)dim mxx(1to
2), nxx(1to
2)nxx(1)
=0: nxx(2)
=10mxx(1)
=0: mxx(2)
=100
select case mxx(1)
case
is= nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行1"
case
is= nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行2"
case
is= nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行3"
case
is> nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行4"
case
is< nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行5"
case
is> nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行6"
case
is< nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行7"
case
is> nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行8"
case
is< nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行9"
endselect
endsub
其實網友之注意到有些case分支沒有執行,但是並沒有注意到,即使被執行的分支,結果也不一定是對的。例如上述**中
nxx(1)
=0: nxx(2)
=10mxx(1)
=0: mxx(2)
=100
很明顯mxx(1) = nxx(1) and mxx(2) > nxx(2)
,應該是希望其使用如下的case分支,但是執行結果卻是執行1
。
case
is= nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行2"
為什麼會出現這個結果呢?這位網友沒有理解case語句的用法,第乙個case分支相當於if mxx(1) = (nxx(1) and mxx(2) = nxx(2))
,此時將相關值代入其中,因此條件表示式變為mxx(1) = (0 and 10 > 100)
,進而簡化為mxx(1) = 0
,第乙個分支條件滿足,所以輸出結果為執行1
,然後執行end select
。由於類似的原因,後續幾個分支不可能被執行。
從**過程分析,可以看出這位網友希望實現的是根據兩個陣列元素的大小關係,進而執行不同的操作,那麼應該使用如下**。
sub demo(
)dim mxx(1to
2), nxx(1to
2)nxx(1)
=0: nxx(2)
=10mxx(1)
=0: mxx(2)
=100
select case
true
case mxx(1)
= nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行1"
case mxx(1)
= nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行2"
case mxx(1)
= nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行3"
case mxx(1)
> nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行4"
case mxx(1)
< nxx(1)
and mxx(2)
= nxx(2)
debug.print "執行5"
case mxx(1)
> nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行6"
case mxx(1)
< nxx(1)
and mxx(2)
< nxx(2)
debug.print "執行7"
case mxx(1)
> nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行8"
case mxx(1)
< nxx(1)
and mxx(2)
> nxx(2)
debug.print "執行9"
endselect
endsub
【**解析】
主要有兩個變化
1.select case true
不在此使用變數
2.每個case分支使用乙個and條件表示式
執行**可以得到正確的結果。
你真的會使用google搜尋?
google搜尋可以說是當今世界最好的搜尋工具。但你真的會使用他嗎?如果你聽過高階搜尋語法,那就讓我們一起來學習吧。google在搜尋中使用 or 大寫的 來進行搜尋結果的邏輯操作。例如 使用 a b 代表搜尋結果包含a和b 使用 a b 代表搜尋結果包含a且不寶行b 使用 a or b 代表搜尋結...
你真的會使用assert嗎?
寫這篇部落格源於在閱讀lighttpd源 是遇到的乙個關於assert應用的疑問。buffer buffer init void 這裡的assert b 似乎有問題,實際release版本在執行中難道不會發生malloc返回null的情況嗎?之後在閱讀 writing solid code 一書時找...
你真的會使用assert嗎?
寫這篇部落格源於在閱讀lighttpd源 是遇到的乙個關於assert應用的疑問。複製 複製 buffer buffer init void 複製 複製 這裡的assert b 似乎有問題,實際release版本在執行中難道不會發生malloc返回null的情況嗎?之後在閱讀 writing sol...