c/c++ 缓冲输入和非缓冲输入
来源:互联网 发布:江苏知原药业产品 编辑:程序博客网 时间:2024/05/23 12:02
简言之,缓冲输入的流程是:键盘-》输入缓冲区-》程序中的输入队列 非缓冲输入的流程是: 键盘-》程序中的输入队列
getche()和getch()这两个函数是用于非缓冲输入的,前者提供回显(记:多一个字母,多一个小功能),后者不提供回显。
C函数一般都有返回值,只是有时候不需要获取这个返回值罢了。
printf返回打印的字符的数目,有输出错误则返回负数。
scanf返回读入项目的个数,如果读入失败(比如想读入一个%d,但是用户却输入的'a')会返回0,这时候输入队列头指针不向后移,下次getchar或者scanf还是从刚才的位置开始;读到文件结尾返回EOF(一般在头文件中会有#defineEOF -1)。
测试getche和getch的例子如下所示:(在c++中需要加上头文件 #include "conio.h")
#include "stdio.h"
int main(void)
{
int d;
char ch;
printf("Input a character:");
ch=getchar();
printf("\nYou input a '%c'\n", ch);
ch = getche();
printf("\nYou input a '%c'\n", ch);
ch=getch();
printf("\nYou input a '%c'\n", ch);
while((ch=getchar())!='\n')
{
putchar(ch);
}
getchar();
return 0;
}
输入:abcd[enter]jk
输出:a
j
k
bcd //说明输入队列不受getche和getch这些非缓冲函数的影响
以上原文转自:http://www.cnblogs.com/particle/archive/2012/11/02/2751430.html
利用 getche()和
配合完成的ASCⅡ码表,就可以得知用户的输入
ƒ
键盘常用ASCII码
ESC键VK_ESCAPE (27)
回车键: VK_RETURN (13)
TAB键: VK_TAB (9)
Caps Lock键: VK_CAPITAL (20)
Shift键: VK_SHIFT ($10)
Ctrl键: VK_CONTROL (17)
Alt键: VK_MENU (18)
空格键: VK_SPACE($20/32)
退格键: VK_BACK (8)
左徽标键:VK_LWIN (91)
右徽标键: VK_LWIN(92)
鼠标右键快捷键:VK_APPS (93)
Insert键:VK_INSERT (45)
Home键: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End键: VK_END (35)
Delete键: VK_DELETE (46)
方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)
F1键:VK_F1 (112)
F2键: VK_F2 (113)
F3键: VK_F3 (114)
F4键: VK_F4 (115)
F5键: VK_F5 (116)
F6键: VK_F6 (117)
F7键: VK_F7 (118)
F8键: VK_F8 (119)
F9键: VK_F9 (120)
F10键: VK_F10 (121)
F11键: VK_F11 (122)
F12键: VK_F12 (123)
Num Lock键:VK_NUMLOCK (144)
小键盘0:VK_NUMPAD0 (96)
小键盘1:VK_NUMPAD0 (97)
小键盘2:VK_NUMPAD0 (98)
小键盘3:VK_NUMPAD0 (99)
小键盘4:VK_NUMPAD0 (100)
小键盘5:VK_NUMPAD0 (101)
小键盘6:VK_NUMPAD0 (102)
小键盘7:VK_NUMPAD0 (103)
小键盘8:VK_NUMPAD0 (104)
小键盘9:VK_NUMPAD0 (105)
小键盘.:VK_DECIMAL (110)
小键盘*:VK_MULTIPLY (106)
小键盘+:VK_MULTIPLY (107)
小键盘-:VK_SUBTRACT (109)
小键盘/:VK_DIVIDE (111)
Pause Break键:VK_PAUSE (19)
Scroll Lock键: VK_SCROLL (145)
有人会尝试
int number = ch;
cout<<ch<<endl;
之类的代码来测试上述键盘常用ASCII码的数值,或者都不尝试就用了,请各位注意的是,我自己尝试后发现了上述的错误,这样的程序输出的数值并不是上面所提到的,多方查询资料后得知键盘ASCII码和字符ASCII码是不同的,C和C++语言中使用的是字符ASCII码,而在js和as中才使用的是上述的键盘ASCII码。
在C和C++语言中普通键盘的编码是用的字符码采用的是ASCII码,而特殊键采用的是扫描码,关于键盘扫描码的介绍请看:
- c/c++ 缓冲输入和非缓冲输入
- c/c++ 缓冲输入和非缓冲输入
- c语言的输入缓冲
- c语言缓冲输入和非缓冲输入的分析(stdin和stdout流的应用,getchar,getch的区别)
- OIS 缓冲与非缓冲输入方式
- 【C语言】缓冲文件系统和非缓冲文件系统
- ogre中缓冲(buffered)输入方式和非缓冲(unbuffered)输入有什么区别?
- 基础教程四(帧监听器和非缓冲输入)
- C语言关于缓冲输入和通过键盘模拟文件结尾条件
- C的全缓冲、行缓冲和无缓冲
- the c programing language 1-22 较长输入行折成短些的多行,非缓冲方式实现
- IO_缓冲和非缓冲
- 基础教程五(缓冲输入)
- 缓冲输入字符流
- 4.输入缓冲
- 缓冲字节输入流
- C# GDI+双缓冲技术
- Ogre笔记七:基础教程四—帧监听器和非缓冲输入
- PANIC: Could not …
- No Launcher activity&n…
- 7月30日编程札记
- 8月1日编程札记
- Excel 2013中实现一行变一列的操作
- c/c++ 缓冲输入和非缓冲输入
- kbhit()函数
- 键盘扫描码介绍
- 1.#INF,-1.#IND,1.#INF000,-…
- A comparative study&nb…
- 安卓上的C++编译器C4droid报错
- 关于sizeof需要注意的地方
- Connectify启动服务器时报错显示Co…
- java中带标签的break 和 continue