【C语言】getchar函数的控制台输入原理,回车符的处理

getchar函数的功能是从输入流读取一个字符,这是我们要明确的就是:

我们在控制台需要输入至少两个字符才能保证这个函数的执行:

例如:

源程序:

char ch;

ch = getchar();

我们需要在标准输入流里面输入   ”w 回车“,就是需要至少输入两个字符,一个是接受的正常字符,另一个就是回车换行符,这个回车符的作用就有些像触发器,只要输入了回车符源程序就会进行一次执行,如果在输入流中一次输入了足够多的数,那么以后就不用输入了,因为源程序里面的所有接受输入流的函数都会自动从这个输入流缓冲区里面读取数据。


比如baidu一位网友问的问题,非常好:

scanf("%c",&a); // 向a输入一个字符
gets(b);             //向b输入一个字符串
gets(c);             //向c输入一个字符串
当我输入一个字符到a后,回车
怎么会直接跳到输入字符串c
我调试看了下,它会自动在a输入完后,向b输入字符'\0'
这是为什么了??

原因就是,开始的时候输入了两个字符,回车符触发了程序的运行,当程序读完第一个字符后,就把第一个字符赋值给了 scanf函数,接着那个回车符就被gets(b)读去了,再接着缓冲区空了,这是就自然又要用户从输入流中输入字符并以回车结束。

getchar函数和scanf函数一样。


目前我知道的解决的办法有两个:

1 可以在这两个函数后面 加一个读取那个回车符的函数,getchar();

2 如果是scanf()函数可以 直接写读入回车符  scanf("%c\n",&a);主要是添加 格式字符串后面的那个 \n。至于原理现在我还说不太清,但感觉可能是 两个换行符同时出现所以编译器自动消掉了一个吧。此问题还在探索中。。。


  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值