作者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