作者fumizuki (小獅)
看板Visual_Basic
標題FAQ (為什麼 3 + 4 < 5)
時間Tue May 17 16:14:10 2005
不定時分享一個常見問題的解答。
今天的問題是很久很久以前一位板友提出的,執行結果很令人意外,程式碼如下:
a = InputBox("請輸入邊長a", "判斷三角形")
b = InputBox("請輸入邊長b", "判斷三角形")
c = InputBox("請輸入邊長c", "判斷三角形")
If c ^ 2 = a ^ 2 + b ^ 2 Then Print "為直角三角形"
If c ^ 2 > a ^ 2 + b ^ 2 Then Print "為鈍角三角形"
If c ^ 2 < a ^ 2 + b ^ 2 Then Print "為銳角三角形"
If a + b <= c Then Print "為非三角形"
當abc分別輸入3,4,5,輸出的結果卻是:
為直角三角形
為非三角形
為什麼 3 + 4 會小於 5 呢?
這是新手常見的問題,是資料型態或使用的運算子造成的意外結果。
InputBox() 傳回的結果是字串型態(String)。
而且 + 這個運算子又可做為連結運算子:
當 + 左右兩個運算元皆為字串型態時,+ 的作用就是字串連結。
當 + 左右兩個運算子為數值型態時,+ 的作用就是算數運算。
因此
"3" + "4" = "34"
"34" < "5"
還有很多意外的錯誤都是因為資料型態導致的錯誤,或是變數名稱輸入錯誤而造成的。
所以,大多程式設計的高手都建議所有
變數一定要宣告再使用。
VB 預設是不需宣告,
可於程式開頭處加上
Option Explicit,強制變數宣告,否則無法通過編譯。
另外一個重點,因為 InputBox() 傳回的資料型態為字串型態,所以應該習慣使用
Val() 函數強制將資料型態轉成數值型態,而 Val() 傳回的型態則是倍精數 (Double)。
因此,上面這個程式照上述的重點,稍做一下修改,就可避免這樣的意外。
Dim a As Double, b As Double, c As Double
a = Val(InputBox("請輸入邊長a", "判斷三角形"))
b = Val(InputBox("請輸入邊長b", "判斷三角形"))
c = Val(InputBox("請輸入邊長c", "判斷三角形"))
If a + b <= c Then
Print "為非三角形"
Else
If c ^ 2 = a ^ 2 + b ^ 2 Then Print "為直角三角形"
If c ^ 2 > a ^ 2 + b ^ 2 Then Print "為鈍角三角形"
If c ^ 2 < a ^ 2 + b ^ 2 Then Print "為銳角三角形"
End If
--
VB 程式設計 倉木麻衣 PTT 星爺板 行列輸入法
======================================================
Visual_Basic MaiKuraki Stephen Array
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.222.155.162