鱼C论坛

 找回密码
 立即注册
查看: 4490|回复: 3

Enter下的\r\n问题

[复制链接]
发表于 2013-9-16 16:19:09 | 显示全部楼层 |阅读模式
10鱼币
关于Enter有\R\N的一个问题,所以做了个实验(TC2.0):
#include "stdio.h"

main()
{
   int a[4];
   scanf("%d", a);
*(a+1) = getchar();
   printf("*(a+0) = %d, *(a+1) = %d", *(a+0), *(a+1));
}

7
*(a+0) = 7, *(a+1) = 10
---------------------------------------------------------------------------
main()
{
   int a[4];
   *(a+0) = getch();
   *(a+1) = getch();
   printf("(a+0) = %d, (a+1) = %d", *(a+0), *(a+1));
}

I:  Enter Enter
O:(a+0) = 13, (a+1) = 13
--------------------------------------------------------------------------------

#include "stdio.h"

main()
{
int a[4];
*a = getch();
*(a+1) = getchar();
printf("*(a+0) = %d, *(a+1) = %d", *(a+0), *(a+1));
}
I: a enter
O:
*(a+0) = 97, *(a+1) = 10

我也搜了些资料,我觉得getch()是立即接收按下键盘的输入;getchar()是接收键盘缓存区的,直到\n就结束.

通过上面实验,我觉得
---------------------------
第二个程序:按下7enter
----------------------
键盘缓存区:
7 \n \r

getch读了7   getchar读了\n

getchar是接收双字符,假设enter是\R\N的话,getchar把两个字符都接收了,取第二个,所以为10

getch只接受当前即输入的,所有接收\R,\N就被舍去了

彻底乱了.....
求教各位,3Q

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

使用道具 举报

 楼主| 发表于 2013-9-17 21:19:09 | 显示全部楼层
有没有大神来解决一下啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-9-18 22:44:31 | 显示全部楼层
用fgets测试一下
fgets(stdin)
这样就把输入缓冲区里面的东西都得到了
之后我就没测你的那些东西了,因为连续的用getchar 本身就感觉不太爽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-9-20 08:55:09 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-6 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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