VB编程学习中若干典型错误实例剖析
VB编程学习中若干典型错误实例剖析 摘要:通过具体的程序实例剖析了 VB初学者在 编程过程中出现的若干典型错误,以期帮助他们了解这些程 序错误产生的原因,从而加深他们对相关VB编程知识的理 解。文中的错误程序示例也可供VB教师作为教学素材使用, 为他们改进课程教学提供一定的参考依据。 关键词:Visual Basic;典型错误;实例剖析 中图分类号:TP312 《Visual Basic程序设计》(下文简称VB)是许多高校 为非计算机专业学生开设的第一门程序设计语言课程。由于 VB课程本身理论性和实践性都比较强,加之学生初次接触程 序设计语言,缺乏相应的知识背景,在编程时难免会产生各 种各样的错误。面对出错的程序,学生找不出错误原因,不 知如何处理,这极易使学生对VB编程产生畏难情绪,从而 不利于课程的进一步学习。基于此,本文针对笔者在VB教 学实践中收集到的学生编程时出现的若干典型错误以具体 实例的方式进行了剖析,以期帮助他们了解这些程序错误产 生的原因,从而加深他们对相关VB编程知识的理解。 1 VB编程典型错误 1.1误用“ + “运算符 “ + ”运算符在VB中既可以用来计算和,也可以用来连 接字符串。“+”作为字符串连接符来使用,只有一种情况, 就是“+“旁边的两个操作数的数据类型都是字符串型时, “+”旁边的操作数只要有一个的数据类型是数值型,“+” 就用来求和。学生初学VB时,容易受数学思维的影响,因 而经常出现误用“ + “运算符的情况。 例如,要求编写程序“从键盘分别输入一个学生三门课 的成绩,求他的总成绩”。有学生是这么做的,先在窗体上 绘制三个文本框,分别用来输入三门课的成绩,再绘制一个 命令按钮,然后编写如下程序: Private Sub Commandl_Click () Dim mark As Single mark = Textl.Text + Text2. Text + Text3. Text Print “该学生的总成绩为:“;mark End Sub 对于上面的程序,运行时要么出现“溢出“错误,要么 得不到正确的结果,主要原因就是“ + “运算符的使用有错 误。学生误认为“ + ”在这里是求和,实际上“ + ”在这里是 做字符串的连接,因为文本框的Text属性的数据类型是字 符串型。因此使用“ + “运算符时一定要特别注意,如果指 定“ + ”要用来求和,一定要确保“ + ”旁边的两个操作数的 数据类型都是数值型(如果不是数值型,应通过VB的相应 类型转换函数将其转换为数值型,例如上面的程序就应使用 Vai函数来完成转换);如果指定要做的是字符串连接,最好 不要使用“ + ”,直接使用“&”运算符。 1.2潜在的类型不匹配错误 对于赋值语句,赋值号“二”两边的数据类型一般要求 应一致,如果两边的类型不同,VB的处理方法是:以左边变 量的数据类型为基准,如果右边表达式计算结果的数据类型 能够转换成左边变量的数据类型,则先由VB自动完成数据 类型转换后,再赋值给左边的变量;如果不能转换,就会出 现类型不匹配的错误。学生初学VB时,在程序中很少有意 识地去关注赋值号“二”两边的数据类型是否一致,这使得 程序可能隐含着潜在的错误,导致程序可靠性不高。 例如,要求编写程序“从键盘输入华氏温度,将其转换 为对应的摄氏温度“,学生一般编程如下: Private Sub Commandl_Click () Dim f As Single, c As Single f = Box (“请输入华氏温度“) c = 5 * (f - 32) / 9 Print “c二 “ ;c End Sub 对于上面的程序,在赋值语句“f = Box (“请输 入华氏温度“)“中,“二“两边的数据类型是不一致的, 变量f是数值型,而Box函数返回值的数据类型是字 符串型。学生测试程序时,如果只是输入了数值(Box 函数返回的实际上是数值型字符串),由于VB会自动完成数 据类型转换,程序可以得到正确的结果,类型不匹配的潜在 错误不会暴露出来;但是如果不慎输入的是一个非数值型的 字符串,VB不能自动转换,这种错误就会显现,影响程序的 正常运行。为了避免这种错误的出现,最好由编程者自己通 过程序转换的方式使赋值号“二”两边的数据类型保持一 致,一味寄希望于由VB自动进行数据类型转换是存在一定 风险的。 同样地,对于关系运算符,两边操作数的数据类型最好 也应保持一致。如果不一致,在某些情况下VB通过自动类 型转换可以将它们转换为同一数据类型后再比较(比如字符 串和数值比较,将字符串转换为数值再比较;逻辑型数据和 数值比较,将True和False分别转换为T、0后再比较), 遇上不能转换的情况,也会产生类型不匹配的错误,例如, 执行语句Print 77> “teat“就会产生这类错误。 1.3对多分支语句执行流程理解不透引发错误 VB中用来实现多分支结构的语句有If (采用 If,,,Then,,,ElseIf…结构)语句和Select Case语句。这两 个语句的执行流程具有两个特点:(1)不管有多少个分支, 只执行其中的一个分支,执行这个分支后不再执行其他的分 支,直接执行End If或End Select后面的语句;(2)只有 前面的分支条件不成立时,才会去判断后面的分支条件。学 生初学VB时,由于对这个执行流程特点的理解还不够透彻, 在阅读和编写多分支结构程序时经常犯错误。 例如,给出下面的程序阅读题:程序运行后,如果在文 本框Textl中输入10,然后单击命令按钮,写出在Text2中 显示的内容。 Private Sub Command 1_Click ( )n = Vai (Textl. Text) Select Case n Case 1 To 20: x = 10 Case 2, 4, 6: x = 20 Case Is = 60: Dj = “及格” Case Is >= 70: Dj = “中等” Case Is >= 80: Dj = “良好“ Case Is >= 90: Dj = “优秀“ Case Else: Dj = “不及格“ End Select Labell. Caption = Dj End Sub 上面的程序,虽然可以正常运行,但存在着逻辑错误。 根据Select Case语句执行流程特点(1),当输入98、88、 78这些分数时,输出结果都是及格。如果学生完全理解了 VB多分支结构语句的执行流程,编完程序后按执行流程检验 一下,是完全可以避免这类错误的。 1. 4错写Select Case语句中Case后面“测试值“的 形式 Select Case语句中Case后面的“测试值“有三种不同 的形式:(1)表达式1[,表达式2]…;(2)表达式ITo表 达式2; (3) Is o第1种形式看上去是一个表达式列表,实 际上是一个离散值的列表,因为是表达式列表中表达式的值 与Select Case后面“测试表达式”的值进行比