输入验证(input validation)是一个不断询问、直到值符合规则的循环。规则可以是范围、长度或存在性检查,循环条件描述的是无效的情况。
本课属于适用大纲的伪代码,建立在赋值与比较的追踪之上,也与验证、校对与测试里的更大范围概念相连。
怎样把规则变成循环?
先用文字说出规则,再写出无效的条件,因为数据有误时循环才重复。
| 检查 | 规则 | 无效条件 |
|---|---|---|
| 范围 | 年龄在 12 到 18 之间 | Age < 12 OR Age > 18 |
| 长度 | 代码恰好 6 个字符 | LENGTH(Code) <> 6 |
| 存在性 | 名字不为空 | Name = "" |
模式是:先读一次,再在无效时重复,并在循环内再次询问。
INPUT Age
WHILE Age < 12 OR Age > 18 DO
OUTPUT "Enter an age from 12 to 18"
INPUT Age
ENDWHILE
示例讲解
用户依次输入 25、9、14,追踪上面的循环。
| 步骤 | Age | 条件 (Age < 12 OR Age > 18) | 动作 |
|---|---|---|---|
| 第一次 INPUT | 25 | 25 > 18,所以 TRUE | 提示,再次 INPUT |
| 第二次 INPUT | 9 | 9 < 12,所以 TRUE | 提示,再次 INPUT |
| 第三次 INPUT | 14 | FALSE,FALSE,所以 FALSE | 循环结束 |
提示输出了两次,Age 最后是 14。检查:14 不小于 12,也不大于 18,所以允许。
有些题目也接受用文字描述检查:“当年龄小于 12 或大于 18 时,重复输入。”要精确地说出规则,避免指向某个内置方法。
要留意的错误
常见失误是该用 OR 的地方用了 AND。
错误的条件:
WHILE Age < 12 AND Age > 18 DO没有任何数同时小于 12 又大于 18,所以条件永远是 FALSE。循环从不运行,25 被接受。
纠正方法是对无效情况使用 OR。第二种失误是在 WHILE 里写了有效条件:WHILE Age >= 12 AND Age <= 18 会对好的值重复提示,对坏的值反而停止。如果你更想写有效的规则,就用 REPEAT ... UNTIL Age >= 12 AND Age <= 18。
自我检查
1. 写出分数必须在 0 到 100 之间时的无效条件。
显示答案
Mark < 0 OR Mark > 100
2. 代码必须恰好 5 个字符。用户输入 “AB12”,循环会重复吗?
显示答案
LENGTH(“AB12”) 是 4,4 <> 5 为 TRUE。会,循环重复并再次询问。
3. 用户实际 17 岁却输入 15,年龄的范围检查能拦住吗?
显示答案
不能。15 在范围内,所以通过。验证检查的是值是否合理,而不是它是否真实。
接下来学什么
验证循环是最容易出现终止错误的地方之一,所以接着学修复循环终止条件。可以在受限伪代码追踪训练器里逐步运行代码。
我们线上一对一计算机科学补习的老师可以给你新的验证情境,并检查你写的每一个条件。