C语言有缓冲输入和非缓冲输入两种情况,默认缓冲输入,因为有的计算机不支持非缓冲输入。缓冲输入下,通过标准输入(键盘)输入的字符会先存在输入缓冲区里,同时会回显到屏幕上。这样就可以在输入回车(将输入缓冲区清空,并发送到程序的输入队列中,供程序使用)之前,进行输入的修改。但是也支持非缓冲输入,不需要输入回车来将输入发送给程序,而是键盘的任何输入都直接发送到程序的输入队列中。
简言之,缓冲输入的流程是:键盘-》输入缓冲区-》程序中的输入队列 非缓冲输入的流程是: 键盘-》程序中的输入队列
getche()和getch()这两个函数是用于非缓冲输入的,前者提供回显(记:多一个字母,多一个小功能),后者不提供回显。
C函数一般都有返回值,只是有时候不需要获取这个返回值罢了。
printf返回打印的字符的数目,有输出错误则返回负数。
scanf返回读入项目的个数,如果读入失败(比如想读入一个%d,但是用户却输入的'a')会返回0,这时候输入队列头指针不向后移,下次getchar或者scanf还是从刚才的位置开始;读到文件结尾返回EOF(一般在头文件中会有#define EOF -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()和 getch()函数就可以对用户的单个输入做及时的响应
配合完成的ASCⅡ码表,就可以得知用户的输入
ASCⅡ码表如下:
码值 | 控制字符 | 码值 | 控制字符 | 码值 | 控制字符 | 码值 | 控制字符 | 码值 | 控制字符 | 0 | NUL | 32 | (space) | 64 | @ | 96 | 、 | 128 | Ç | 1 | SOH | 33 | ! | 65 | A | 97 | a | 129 | ü | 2 | STX | 34 | ” | 66 | B | 98 | b | 130 | é | 3 | ETX | 35 | # | 67 | C | 99 | c | 131 | â | 4 | EOT | 36 | $ | 68 | D | 100 | d | 132 | ä | 5 | ENQ | 37 | % | 69 | E | 101 | e | 133 | à | 6 | ACK | 38 | & | 70 | F | 102 | f | 134 | å | 7 | BEL | 39 | , | 71 | G | 103 | g | 135 | ç | 8 | BS | 40 | ( | 72 | H | 104 | h | 136 | ê | 9 | HT | 41 | ) | 73 | I | 105 | i | 137 | ë | 10 | LF | 42 | * | 74 | J | 106 | j | 138 | è | 11 | VT | 43 | + | 75 | K | 107 | k | 139 | ï | 12 | FF | 44 | , | 76 | L | 108 | l | 140 | î | 13 | CR | 45 | - | 77 | M | 109 | m | 141 | ì | 14 | SO | 46 | . | 78 | N | 110 | n | 142 | Ä | 15 | SI | 47 | / | 79 | O | 111 | o | 143 | Å | 16 | DLE | 48 | 0 | 80 | P | 112 | p | 144 | É | 17 | DCI | 49 | 1 | 81 | Q | 113 | q | 145 | æ | 18 | DC2 | 50 | 2 | 82 | R | 114 | r | 146 | Æ | 19 | DC3 | 51 | 3 | 83 | S | 115 | s | 147 | ô | 20 | DC4 | 52 | 4 | 84 | T | 116 | t | 148 | ö | 21 | NAK | 53 | 5 | 85 | U | 117 | u | 149 | ò | 22 | SYN | 54 | 6 | 86 | V | 118 | v | 150 | û | 23 | TB | 55 | 7 | 87 | W | 119 | w | 151 | ù | 24 | CAN | 56 | 8 | 88 | X | 120 | x | 152 | ÿ | 25 | EM | 57 | 9 | 89 | Y | 121 | y | 153 | Ö | 26 | SUB | 58 | : | 90 | Z | 122 | z | 154 | Ü | 27 | ESC | 59 | ; | 91 | [ | 123 | { | 155 | ¢ | 28 | FS | 60 | < | 92 | \ | 124 | | | 156 | £ | 29 | GS | 61 | = | 93 | ] | 125 | } | 157 | ¥ | 30 | RS | 62 | > | 94 | ^ | 126 | ~ | 158 | ₧ | 31 | US | 63 | ? | 95 | — | 127 | DEL | 159 | ƒ | |
| | | | | | | | | | | | | | |
码值 | 控制字符 | 码值 | 控制字符 | 码值 | 控制字符 | 160 | á | 192 | └ | 224 | α | 161 | í | 193 | ┴ | 225 | ß | 162 | ó | 194 | ┬ | 226 | Γ | 163 | ú | 195 | ├ | 227 | π | 164 | ñ | 196 | ─ | 228 | Σ | 165 | Ñ | 197 | ┼ | 229 | σ | 166 | ª | 198 | ╞ | 230 | µ | 167 | º | 199 | ╟ | 231 | τ | 168 | ¿ | 200 | ╚ | 232 | Φ | 169 | ⌐ | 201 | ╔ | 233 | Θ | 170 | ¬ | 202 | ╩ | 234 | Ω | 171 | ½ | 203 | ╦ | 235 | δ | 172 | ¼ | 204 | ╠ | 236 | ∞ | 173 | ¡ | 205 | ═ | 237 | φ | 174 | « | 206 | ╬ | 238 | ε | 175 | » | 207 | ╧ | 239 | ∩ | 176 | ? | 208 | ╨ | 240 | ≡ | 177 | ? | 209 | ╤ | 241 | ± | 178 | ▓ | 210 | ╥ | 242 | ≥ | 179 | │ | 211 | ╙ | 243 | ≤ | 180 | ┤ | 212 | Ô | 244 | ⌠ | 181 | ╡ | 213 | ╒ | 245 | ⌡ | 182 | ╢ | 214 | ╓ | 246 | ÷ | 183 | ╖ | 215 | ╫ | 247 | ≈ | 184 | ╕ | 216 | ╪ | 248 | ≈ | 185 | ╣ | 217 | ┘ | 249 | ∙ | 186 | ║ | 218 | ┌ | 250 | · | 187 | ╗ | 219 | █ | 251 | √ | 188 | ╝ | 220 | ▄ | 252 | ⁿ | 189 | ╜ | 221 | ▌ | 253 | ² | 190 | ╛ | 222 | ? | 254 | ■ | 191 | ┐ | 223 | ? | 255 | ÿ | |
| | | | | | | | | | | | | | | |
| |
| | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | |
| | |
| | | | | | | | | | | | | |
| |
| | | | | | | | | | | | |
| | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | |
| | |
| | | | | | | | | | | | |
键盘常用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) 有人会尝试 char ch = getche();
int number = ch;
cout<<ch<<endl; 之类的代码来测试上述键盘常用ASCII码的数值,或者都不尝试就用了,请各位注意的是,我自己尝试后发现了上述的错误,这样的程序输出的数值并不是上面所提到的,多方查询资料后得知键盘ASCII码和字符ASCII码是不同的,C和C++语言中使用的是字符ASCII码,而在js和as中才使用的是上述的键盘ASCII码。 在C和C++语言中普通键盘的编码是用的字符码采用的是ASCII码,而特殊键采用的是扫描码,关于键盘扫描码的介绍请看: |
键盘扫描码介绍