C语言 getch( )与回车符

来源:百度知道 编辑:UC知道 时间:2024/05/25 17:24:07
以下是我在【VC】上和【dev C++】上调试的一个关于getch()的C语言程序,

当我在键盘只敲“回车”键时,运行结果输出如下:
[1个空格]Left[1个空格]=4=5=6=7=8=9=root ->data =
[1个空格]Left[1个空格]space6=7=8=9=root ->data =
当我在键盘只敲数字“1”键时,运行结果输出如下:
=1=2=3=4=5=6=7=8=9=root ->data = 1 Left
=1=2=3=4=5=6=7=8=9=root ->data = 1 Left space

请问为什么输出是这样啊??

#include <stdio.h>
#include <conio.h>

int main()
{
char ch;

while(1)
{
ch = getch();
printf("=1=2=3=4=5=6=7=8=9=root ->data = %c Left \n", ch);
printf("=1=2=3=4=5=6=7=8=9=root ->data = %c Left space\n", ch);
}

system("pause");
return 0;

}

-------------

注:[1个空格]是指在运行窗口看到1个空格,因为百度知道的问题补充说明
提交后,每行的前面的空格均不见了,所以特此表示一个空格

输入1,打印结果应该跟你想象的一样,就不说了。
输入回车,getch()接受到的ASCII控制符实际是13(它的作用是把光标移动到行首),而不是10(它的作用是换行)。

于是printf("=1=2=3=4=5=6=7=8=9=root ->data = %c Left \n", ch);的时候
首先打印出=1=2=3=4=5=6=7=8=9=root ->data =
然后控制字符ch把光标移动到行首,再打印出Left \n
后面打印的Left把行首的几个字符覆盖了。因为计算机速度很快,你看不到这个覆盖过程。

这个是转义字符搞的鬼,enter健的转义字符作用是将光标移到本行的开头。
也就是说开始输出如下:
=1=2=3=4=5=6=7=8=9=root ->data =接下来碰到了enter转义字符,又到开头了
_left_
可以看到,覆盖后的输出应该是:
_left_4=5=6=7=8=9=root ->data =

敲“回车”键 实际ASCII的值有两个(十六进值) (0D)和(0A)
(0D)将光标移动到此行的第一列,就会将原来显示的内容覆盖
-----------------------------------------------
如果怀疑的话,请建个文本文件,不要输入任何内容,只敲回车,然后存盘退出。看看文件的大小为两个字节。然后用DEBUG看看存入的值就明白了。
注意:c语言的\n和我们键盘的回车键的含义是不同的。