请教一个vb的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 15:51:31
Dim c$
Dim s$
dim m&
dim yu&
s = ""
m = 6565
Do While m <> 0
yu = m Mod 100
m = m / 100
c = Chr(yu)
s = c & s
Loop
Text2.Text = s
我想输出AA,但不是,why?

正如楼主所言,运行结果不是"AA"
第一次的m mod 100得到的当然是65,m/100已经变成了66(m是整形变量),s="A"
第二次,m mod 100得到的是66, m/100已经变成了1,S="BA"
第三次,你再m mod 100得到的将是1,CHR(1)是个通讯专用字符:SOH(文头),times newman字体下显示为一个方框、宋体下则是"",m/100=0
第四次,m=0退出do循环.

注意你下面这两句
Do While m <> 0
m = m / 100
你要明确:m /100,本来就是除不尽的,所以,不管你除多少次,总是m<>0的!!!
如果我没猜错,你这个程序会陷入死循环。
其次,你第一次的m mod 100得到的当然是65,那么第二次,因为m/100已经变成了65.65,那么,你再m mod 100得到的将是65.65,下面几次就一直会得到这个值“65.65”
而Chr()要求的是一个整数。
就说这么多,你自己应该知道为什么了吧?

和C语言不一样的。在C下面int的值6565/100=65。但是VB会四舍五入。这样写就安全了。

把m = m / 100
改成

m = (m - yu) / 100

变成:

Private Sub Command1_Click()
Dim c$
Dim s$
Dim m&
Dim yu&
s = ""
m = 6565
Do While m > 0
yu = m Mod 100
m = (m - yu) / 100
'MsgBox m
c = Chr(yu)
'MsgBox c
s = c & s
Loop
MsgBox s
End Sub