鱼C论坛

 找回密码
 立即注册
查看: 5130|回复: 10

还是Enter键的问题

[复制链接]
发表于 2013-1-31 17:55:37 | 显示全部楼层 |阅读模式
10鱼币
  1. main()
  2. {
  3.         char a, b;

  4.         a = getch();
  5.         b = getchar();
  6.         printf("a = %d, b = %d", a, b);
  7. }
复制代码

输入: Enter a Enter
输出:13 97

我觉得缓冲区;里应该为  \r \n a \r \n,getch直接读取\r,而getchar应该从缓冲区的第一个字符\n来读啊   
请教为什么      有点晕头转向了     感谢大家

最佳答案

查看完整内容

为什么getch获取的enter键值是\r,而getchar是\n呢? \r 是回车,return,意思就是“回到行首” \n 是换行,newline,意思就是“另起一行” 我们在平时使用电脑时,已经习惯了回车和换行一次搞定,敲一个回车键,即是回车,又是换行,但在早期的打字机上,要另起一行打字需要两个步骤,首先要发送命令"\r”将打字头复位,即回车;然后再发送命令"\n”让打字机走纸移到下一行。 getch()不是ANSI里的标准库函数,这是历史遗留 ...
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-1-31 17:55:38 | 显示全部楼层
为什么getch获取的enter键值是\r,而getchar是\n呢?
\r 是回车,return,意思就是“回到行首”
\n 是换行,newline,意思就是“另起一行”
我们在平时使用电脑时,已经习惯了回车和换行一次搞定,敲一个回车键,即是回车,又是换行,但在早期的打字机上,要另起一行打字需要两个步骤,首先要发送命令"\r”将打字头复位,即回车;然后再发送命令"\n”让打字机走纸移到下一行。
getch()不是ANSI里的标准库函数,这是历史遗留问题,按照上述步骤,是先发送"\r",所以getch获取的enter键值是\r。
getchar()是标准库函数,既“敲一个回车键,即是回车,又是换行”,而现在的“\n“表示既回车又换行的意思。
参考资料:http://hi.baidu.com/vv1133/item/bd4b1ea8b70386f415329ba2
找了好久,网上大部分都说不太清楚。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-31 19:19:05 | 显示全部楼层
getch 读取后就直接停止了吧,貌似getchar没运行。你把getch和getchar换下顺序输入就会变的不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-31 20:36:57 | 显示全部楼层

你知道getchar和getch的区别和使用么  。。。。   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-31 20:59:04 | 显示全部楼层
回车键的ASCII码值是13,当你按下ENTER时产生了13这个值, 再输入a产生97啦…………你想太多啦, 按一个Enter怎么会出来那么多东东嘞?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-1-31 21:07:59 | 显示全部楼层
格式天下 发表于 2013-1-31 20:59
回车键的ASCII码值是13,当你按下ENTER时产生了13这个值, 再输入a产生97啦…………你想太多啦, 按一个Ent ...

Enter键在windows 下有两个  一个回车一个换行  你可以看看资料先   谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-1-31 22:30:14 | 显示全部楼层
1079629687 发表于 2013-1-31 21:07
Enter键在windows 下有两个  一个回车一个换行  你可以看看资料先   谢谢了

http://zhidao.baidu.com/question/159653585.html
你看看啊  , enter键在C语言就是用ASCII码值为13代表啊
你说的是在对话框里面才是 你说的那个啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-1 07:17:54 | 显示全部楼层
格式天下 发表于 2013-1-31 22:30
http://zhidao.baidu.com/question/159653585.html
你看看啊  , enter键在C语言就是用ASCII码值为13代表 ...

你测试输入的时候   按两个Enter你就知道了   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-1 10:16:59 | 显示全部楼层
1079629687 发表于 2013-2-1 07:17
你测试输入的时候   按两个Enter你就知道了

哦……我知道了 ,enter键有 回车 和 换行两个功能 ,在不同平台,输入回车,getch()将返回不同数值,而getchar()统一返回10(即\n)
windows平台下ENTER键会产生两个转义字符 \r\n,因此getch返回13(\r)。

你可以试试把两个都变成getchar() 测试一遍
然后再把它变成 getch()测试下    按两次Enter键测试啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-1 15:31:09 | 显示全部楼层
格式天下 发表于 2013-2-1 10:16
哦……我知道了 ,enter键有 回车 和 换行两个功能 ,在不同平台,输入回车,getch()将返回不同数值,而g ...

我记得我看到getchar应该是根据回车来结束,所以应该不接收这个字符,但是如果结束了\n又在\r后面 getchar读什么呢  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-2-1 15:52:37 | 显示全部楼层
1079629687 发表于 2013-2-1 15:31
我记得我看到getchar应该是根据回车来结束,所以应该不接收这个字符,但是如果结束了\n又在\r后面 getcha ...

当然对于单个 ‘\r’和 ‘\n’来说 , getchar() 接收后产生的对应的值为10 和 13 , 但是,我的意思是对于电脑按下Enter键时 , getchar()返回的必须是10 啊  ,
你的 “但是如果结束了\n又在\r后面 getchar读什么”这句话我不是很理解……
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 16:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表