首页 理论教育 数据使用常见故障及程序调试技巧

数据使用常见故障及程序调试技巧

时间:2023-11-26 理论教育 版权反馈
【摘要】:诊断结论可分为错误和警告两类。产生错误时,编译程序会出现报错提示,根据提示对源程序进行修改即可。由于在设计程序时,都是按F5键或单击工具栏上的按钮调试并运行程序,所以,从表面上来看,很难区分哪些是语法错误,哪些是运行错误。例如,使用了不正确的变量类型、指令的次序错误、循环中起终值不正确、程序设计不正确等。

数据使用常见故障及程序调试技巧

1. 数据使用时的常见故障

(1)变量在使用前应首先赋值

C#中要求变量赋值使用,也就是在使用变量前应首先给变量赋值,否则会出现编译错误。例如,在程序“Task2-2”中,如果把语句“r=5;”去掉(或者忘记输入),则在错误列表中出现“使用了未赋值的局部变量r”的错误信息。①

(2)变量的值与变量的类型要匹配,否则会导致错误。

边学边做

① 有如下程序段:

试问程序运行结果是多少?

___________________

___________________

___________________

赋值语句“char c=65;”是否正确?为什么?

___________________

___________________

___________________

(3)明确C#的一些默认规定。

实数型常量在C#中默认为double类型,因此将实数型常量赋值给浮点型变量时,必须在实数型常量后加上类型说明,否则将产生编译错误。例如:

在程序“Task2-2”中,语句“s=3.14*r*r”出错的原因,就是C#中默认将实数类型的常量作为double类型对待,也就是实数常数“3.14”作为一个double类型的数据,而r、s都是定义的float型,在表达式运算中,“3.14*r*r”中的变量r都被隐式地转换成double型,所以其运算结果也是double型,而变量s是float型,因此出现了“无法将类型‘double’隐式转换为‘float’”的错误,应该用一个强制转换。③

③“Task2-2”中,是否可以使用语句s=float.Parse(3.14*r*r);进行类型转换?为什么?

___________________

___________________

___________________(www.xing528.com)

整数类型的常量在C#中默认为int类型。在程序“Task2-2”中,当把半径“r”赋值为整数“5”时,没有发生错误,这是因为整型常数“5”被作为int型,然后隐式地转换成float类型。而将半径“r”赋值为“10.2”时,则发生了错误,其原因是该实数被作为double类型,而double类型不能隐式地转换成float型。④

④ 修改任务2-2,要求在显示圆的面积的同时计算并显示圆的周长,用常量PI表示圆周率,代替常数“3.14”。

___________________

___________________

___________________

2. 程序错误分类

程序错误可分为3类:语法错误、运行错误和逻辑错误。

1)语法错误

语法错误是由于编程中输入不符合语法规则的语句而产生的,如表达式不完整、缺少必要的标点符号、关键字输入错误、数据类型不匹配、循环语句或选择语句的关键字不配对、对象属性的错误使用等。

读者已经注意到,在录入程序代码的过程中,Visual Studio 2010集成开发环境左下角的错误列表窗口,会即时地指出目前程序中存在的一些格式上的错误,并在代码窗口中出错的代码处有红色的波浪线。如缺少“;”时,在错误列表窗口显示“应输入;”,这些格式上的错误都属于语法错误。(当输入“;”后,错误提示信息也自动消失,这是开发环境提供的自动调试功能。)

除了在录入代码的过程中由开发环境提示一些简单的语法错误外,语法错误也可能在编译程序时被发现。在Visual Studio 2010集成开发环境中,按F5键启动调试,对程序进行编译,编译工具会对程序中的语法错误进行诊断。比如在任务2-2中出现的都是语法错误。

诊断结论可分为错误和警告两类。错误通常是在编译时语法不当引起的。比如,未引用命名空间、缺少括号、变量未声明等。产生错误时,编译程序会出现报错提示,根据提示对源程序进行修改即可。这类错误是最容易发现的。警告是指被编译程序怀疑有错,但不确定,有时可强行编译通过。

语法错误都显示在Visual Studio 2010开发环境的错误列表窗口。在错误列表的最左列,图标指明出现的是错误,图标指明的是警告;第2列是错误的序号;第3列是错误说明,说明发生了什么错误,调试程序主要就依靠这个说明;第4列说明了发生错误的文件;第5列和第6列说明了发生的错误是代码的哪一行、哪一列;第7列说明了出错的项目。在错误列表中双击某一行,即可将光标定位到“代码”窗口中出错的位置。

当出现编译错误时,应当仔细阅读错误提示,并从中分析错误原因。如果不熟悉错误中的提示,一方面可以通过双击错误提示来转到出错行,对出错行及上下文进行分析,以找到错误;另一方面,可以单击错误提示,再按F1键调出MSDN帮助系统来协助分析错误(前提是MSDN已安装,在安装VS2010时可同时安装)。

在VS2010开发环境中选中相关内容,按F1键,此时系统会自动在MSDN Library进行搜索并打开相关信息。比如,要查看Button控件的某个属性,可以在窗体中选中Button控件,按F1键,即可打开Button控件的联机帮助。如果对代码不了解,可以在代码窗口中将光标放置在要查询的代码中,按F1键,即可打开联机帮助中的相应内容。

2)运行错误

运行错误是指程序在运行过程中出现的错误,如进行除法运算时除数为0、数组下标越界、文件不能打开、磁盘空间不够等。这类错误在编译程序时一般是无法发现的。由于在设计程序时,都是按F5键或单击工具栏上的按钮调试并运行程序,所以,从表面上来看,很难区分哪些是语法错误,哪些是运行错误。

3)逻辑错误

程序运行后没有得到预期的结果,这说明程序存在逻辑错误。例如,使用了不正确的变量类型、指令的次序错误、循环中起终值不正确、程序设计不正确等。这类错误从语法上来说不存在错误,只是程序逻辑上存在缺陷。比如,在任务2-1的整数计算器中,定义了操作数1、操作数2、运算结果都是int型,而int型是有一个数据范围的,当两个没有超过int表示范围的整数相乘时,其结果可能超过了范围,但此时程序并未给出任何提示信息,程序的结果却是错误的。逻辑错误也会连带产生运行错误。

通常,逻辑错误不会产生错误提示信息,因此错误较难排除,需要程序员仔细分析程序,并借助VS2010开发环境提供的调试工具才可以找到出错的原因并排除错误。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈