本次教程的内容:
- 循环指令
- 字符的ASCII码
- 条件判断指令
这是昨天的代码
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
int a;
a= getch();
cout << a << endl;
a= getch();
cout << a<< endl;
}
我们运行了几次后,会记录下来4个方向键的数据
上= 72
下= 80
左= 75
右= 77
但每次为了看一个键,都得重新运行一次,未免太麻烦了。
我们希望一直重复运行,直到我们记录下所有的必须的信息。
这里介绍第三种出现的指令类型——循环指令。
我们把代码这样修改一下。
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
int a;
while(1){
a= getch();
cout << a << endl;
}
}
我们看代码中的第6行while(1),它的含义是后面大括号内的代码将无限循环。
具体来说,当精灵执行代码到第9行的}时,它实际执行的是无条件跳转回到第6行继续执行。
第6行的本质是一个条件分支指令,它的含义是当精灵执行到第6行时,它会首先计算后面括号里的内容。
如果为真(不是0),继续运行下一句;否则,直接跳转到大括号后面的第1句。
在这里,大括号没有其他语句了,如果能跳转出来,就意味着程序的结束。
但由于我们在while的括号中写的是1,所以它永远也不可能为0,于是代码将永远运行下去。
我们注意到原来的两遍getch()现在只保留一次了,因为现在本来就是无限循环,早已不止两次了。
不用担心我们的精灵得不到休息,我们如果想停下程序,只须关闭控制台的黑窗口即可。
我们可以执行一次这个程序,试验键盘上的各种键,看看输出的是什么。
我们会注意到如果大写锁关闭时,我们点击a,b,c,d...等字母键会出现97,98,99...等数字;当打开大写锁时,点击a,b,c,d...等字母键,相当于我们实际输入的是A,B,C,D...屏幕上会显示出65,66,67...等数字;当我们点击0,1,2,3...等数字键时,我们看到屏幕上显示出的是48,49,50...等数字。这些数字,被称为对应字符的ASCII码(读音:阿斯克码)。
我们知道计算机中实际上只有数字,字符进入计算机必须先通过一个约定,用数字代表对应的字符。ASCII正是这样一个被广泛使用的约定。
你还可以继续看其他键的ASCII码,比如+是43,-是45,等等,其中有三个键,值得我们记录一下,后面的工作中会用到。一个是ESC键,在键盘的左上角,它的ASCII值是27;一个是回车键,ASCII值是13;一个是空格键,ASCII值是32。
接下来,我们看看地图工作组的输入部门,如何在接收到不同键盘指令时,进行不同的处理。
我们引入最后一种指令类型:分支判断。
看下面的代码:
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
int a;
while(1){
a= getch();
if (a==72) {
cout << "向上移动一格" << endl;
}
if (a==80) {
cout << "向下移动一格" << endl;
}
}
}
代码第8行的if就是典型的分支判断指令。
它的含义是,当if后面的括号中的值为真(不是0)时,执行后面大括号内的第一条指令,否则跳到大括号后面的第一条指令。
这样,当我们的程序运行时,我们会发现,除了点击方向键上和下,屏幕会有对应的输出外,其他键盘都没有反应了。
这也正符合了我们的需求。
课程小结:
这次的课程讲了字符的ASCII码,以及循环指令和分支判断指令,至此全部的指令类型都已经学过了。同学们看可以尝试修改最后的代码,支持全部的4个方向键和两个功能键:
方向键:显示对应的“向*移动一格”
ESC:显示“打开菜单”
空格/回车: 显示“确定选择”