C++程序设计中数据的有效性检查的意义和方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++程序设计中数据的有效性验证

l 数据有效性验证的意义

C 语言为了给程序员更大的空间,在编译时对语法限制并不严格,例如不会检查数组是否越界,也不检查类型是否匹配。编译通过的程序,在运行时可能会因为输入的数据与程序中期望的数据不一致而导致运行错误。例如在求三角形面积的程序中,需要用户输入三角形的三条边长,再根据边长求面积,用户输入的三个代表边长的数据有可能不能构成一个三角形,这样计算出来的就是一个没有意义的结果。通过验证用户输入数据的有效性,可以防止由于这类无效输入数据所导致的潜在问题,并有助于找到代码中的 bug。数据的有效性验证实际上就是检查数据是否在程序能接受的合理范围,下面就几种常见的数据有效性情况进行讨论。

2 数据有效性验验证的类别

2.1 验证数据类型

程序中每个变量在使用前都要先进行声明,即定义每个变量所属的类型,类型决定了变量中可存储的数据类型及分配的存储空间长度,例如定义存储年份、月份的变量一般为整型。变量的类型也决定了变量可以进行的运算,例如在算术运算中,通常是只能是整形、实型或字符型数据。如果用户输入的数据与程序中定义的变量类型不匹配就会导致运行异常。验证数据类型就是在给变量赋值时判断数据跟类型是否匹配,从根本上防止用户输入错误,即使发生了错误,也要在第一时间通知用户。

2.2 验证数据的范围

验证数据的范围,是指验证某一数据是否介于某一范围之间或不在某一范围之间,如表示年龄一般为正整数,表示时间中的月份的取值是 l一12,天数是 l一31,表示百分制成绩时一般在 0至 100范围,而性别的取值只能为“男”或“女”,输入口令时经常需要验证口令的长度是否满足一定要求,类似的例子还很多。

2.3 验证数据的合理性

有时输入的几个数据之间需满足一定的约束关系才是合理的,比如:输入三角形的三条边时需要验证这三个数是否能构成一个三角形,代表三角形的三条边长的三个数据之间必须满足的条件是:各条边的值都大于 0,且任两条边的和大于第三条边,任两条边的差小于第三条边。所以在求三角形面积之前必须先验证数据的合理性。现实生活中这样的例子还很多,如在录入用户信息的程序中,地址如果为北京,那么邮政编码就不应该是北京以外地区的邮编,还有出生日期和年龄这两个数据之间也存在一定的约束关系,在为学生分配宿舍时需要考虑与性别、所在班级这些数据之间的合理性。在程序中对于这些具有特定含义的数据很多时候都需要进行合理性验证。

2.4 数据的一致性

数据一致性通常指几个相互关联的数据之间的逻辑关系是否正确和完整。而数据不一致性是指数据之间相互矛盾。导致数据不一致的原因主要有以下几种:一是由于数据冗余造成的,出现这种情况往往是由于同一数据分别存储在不同地方,如果更新时没有对重复存放的数据进行一致性地更新,就会造成同一数据有多个不同的取值;二是由于并发控制不当造成的,这种情况是由于多用户共享数据,在多个用户同时对共享数据进行更新时,如果没有采取相应的同步措施,就会导致不同用户访问同一数据时结果不一致;

3 数据有效性验证的应用

在程序设计过程中,需要对数据进行有效性验证的情况很多,下面通过几个具体的例子对数据有效性的具体应用加以说明。

例 l:若程序中需要输入学生的成绩,以下程序片段实现了验证用户输入的考试成绩是否为数字:

intscore;

printf(”输入学生成绩:”);

scanf(”%dt.,&score);

if(isdigit(score)-=O)

printf(”输入成绩错误!\n”);

除了可以利用 isdigit(ch)i~数检查输入的数据是否是数字之外,C语言中还提供了其它一些函数来对数据进行类似的检查,如,isalnum(ch)检查 ch是否是字母或数字,isalpha(ch)检查是否是字母,islower(ch) isupper(ch)分别用于小字字母和大写字母的检查等等,引用这类函数时需要包含头文件“ctype.h”。

例 2:验证数据范围,以下程序片段完成了对输入的年份和月份的范围进行检查。

y=l;

m=1;

while(y)

{

printf(”输入年份(大于 O):”);

scanf(”%dt..&year);

if(year>O)

y=0;

else

printf(”输入年份错误 !kn”);

)

while(m)

{

printf(”输入月份(1一l2).TI);

scanf(”%dt'.&month);

if(month>=1&&month<=12)

m=0:

else

printf(”输入月份错误!\n”);

)

以上代码中,如果用户输入的年份不是一个大于 0的整数或者输入的月份不是 l—l2之间的整数,

都会显示输入错误的消息,并通过循环让用户重新输入数据,直到输入正确的数据为至才结束循环。

相关文档
最新文档