精華區beta Visual_Basic 關於我們 聯絡資訊
不定時分享一個常見問題的解答。 今天的問題是很久很久以前一位板友提出的,執行結果很令人意外,程式碼如下: 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