本次教程的内容:
- 获取键盘输入的两种方法
地图工作组的另一个工作,是监控键盘的输入。
让我们继续研究接收输入的几种方法。
最简单的接收键盘输入方法是使用cin对象。首先尝试运行下面的例程,并随便输入一个数字。
计算机会将它加上10之后再次输出到屏幕上。
# include <iostream>
using namespace std;
int main(){
int a;
cin >> a;
a= a+ 10;
cout << a;
}
注意 cin和cout的 符号的方向不一样 >> 。
这里的四条指令,第一条并不是真正的指令,并没有实际的动作。它的用处是定义变量。
也就是将精灵大楼的某个房间起个名字为a,至于这个房子的实际层号楼号,我们现在并不关心。
我们知道名字不等于地址,如果你想看它的具体地址,可以用&符号来获得,&名字,就代表这个名字的地址。这条指令可以查看a房间的具体地址
cout << &a;
第二条指令,包含两个动作,一个是电话功能指令,电话过程是这样的。
精灵:请帮我看看用户从键盘输入了什么?
控制台工作组cin>>负责人:他现在还什么都没有输入。
精灵:好的没关系,我在线等。
控制台工作组cin>>负责人:他好像开始开始输入了,用不用告诉你他输入了什么?
精灵:现在不用,等他确定(按回车键)之后你再告诉我。
控制台工作组cin>>负责人:我把他的输入同时显示在了屏幕上,以免他输入错误。
精灵:现在不用,等他确定(按回车键)之后你再告诉我。
控制台工作组cin>>负责人:好了,他已经确定了,输入的是15。
精灵:好的,谢谢。
然后精灵做第二个动作:把15保存到房间a。
这是我们前面说过暂存指令。
第三条指令,同样包含两个动作。一个是电话功能,让数学工作组计算房间a中数字与10的和。
拿到结果(25)之后,精灵做第二个动作:把结果暂存到房间a。
那么刚才保存的15呢?它已经不存在了。所以数据只是暂存。
第四条指令是我们熟悉的电话功能指令,它通知控制台输出工作组将房间a中的结果输出到屏幕上。
我们注意到这样的获取输入方法并不适合我们的RPG游戏。我们控制英雄移动使用的方向键,不可能每次按键之后都输入一个回车。其实控制台工作组还有其他的接收输入的方法,我们看下一个程序。
# include <iostream>
# include <conio.h>
using namespace std;
int main(){
int a;
a= getch();
cout << a << endl;
a= getch();
cout << a<< endl;
}
在运行之前,让我们先观察一下程序代码。我们看到在程序的第二行多了一条内容
# include <conio.h>
conio.h,我们可以把它理解为一个电话本。它告诉我们下面的指令getch()的电话号码是多少。
在精灵大楼的工作间里,有很多电话本。每个电话本上记录了很多功能指令的电话是多少。
只有知道了这个电话号码,精灵才知道应该给怎样拨打电话。
为了提高工作效率,我们在程序的开头必须把本段程序中的所有指令会用到电话本都列举出来。
我们继续看getch()指令。
和以前通过>> 与<<来标识的指令不一样,它是一个标准的函数,后面跟一对括号,表示这个函数是没有任何参数的。
但即使是这样,空括号也不能省略。只有加了括号,精灵才知道它是一个函数的名字,才会到电话本中找电话。
否在精灵会把它当作是一个大楼中的房间名。
我们发现
a= getch();
cout << a << endl;
这两句重复了两次,因为4个方向键和其他一些功能键具有这样的一个特性,每按下一次,就相当于触发了两次按键。我们必须两次使用getch()才能获得它的完整信息。
精灵与getch负责人的电话过程是这样的。
精灵:请帮我看看用户从键盘输入了什么?
控制台工作组getch负责人:他现在还什么都没有输入。
精灵:好的没关系,我在线等。无论他按了什么,立刻告诉我!
控制台工作组cin>>负责人:他按了一个键!编号是224!
精灵:好的,谢谢!(挂机了)
控制台工作组cin>>负责人:等等,他好像还按了另外一个……
电话另一端:嘀嘀嘀嘀
……
过了一段时间,精灵又打了过来。
……
精灵:请帮我看看用户从键盘输入了什么?
控制台工作组cin>>负责人:他按了一个键!编号是72!
精灵:怎么那么巧,我刚刚打过来他就按键了?
控制台工作组cin>>负责人:其实他刚才一次按了两个键!你只听了一个就挂了电话……
精灵:是这样啊。没关系,以后我都打两遍就好了!
课程小结:
cin >> 和 getch() 是控制台下两种常用的获取键盘输入的方法。我们会用到的是后者。
多运行几遍最后这段程序,每次记录下不同方向键的数值,我们后面的课程会用到。
来源:CSDN
作者:xiaorang
链接:https://blog.csdn.net/xiaorang/article/details/104745607