初识C语言——常见的输入函数(完结篇)

        在上篇我已经大致介绍了getchar函数的参数和基本用法——从键盘输入字符,并读入字符,输出该读取的字符需要putchar函数来输出。这是上篇文章结尾的话语,我们来继续介绍下面。

        我们首先抛出第一个问题——scanf和getchar函数都可以接受字符数据,那二者有什么联系区别呢?

目录

一,getchar与scanf共用时的情况:

1.1错误原因:

1.2解决办法:

①清理缓冲区

②更换函数


一,getchar与scanf共用时的情况:

我们会清晰的由上图发现,输入了正确的关键词之后,完全没有输入判断的(Y/N)的机会就输出了“关键词确认失败” 这是为什么呢?

这就要解释一下我们的键盘输入和缓冲区的关系

当我们从键盘输入“abcdef”并敲击回车键之后,我们会往缓冲区暂留“abcdef\n”这七个单个字符(此处的’ \n ‘是换行字符) 

1.1错误原因:

首先是在scanf函数接收缓冲区的数据,而scanf函数碰到换行符就会停止读取。所以我们会把\n这一字符继续留在缓冲区等待下一次读取,而恰好下一次的读取就是getchar函数来读取,它会把缓冲区的‘ \n '读取,而回车字符不等于Y,自然会直接输出“关键词确认失败。”

1.2解决办法:

①清理缓冲区

我们可以想办法把这个' \n '从缓冲区去除,这样便可以重新输入ch的数值来判断是否正确。

依照这样的思路我们就可以用getchar函数先来去除掉缓冲区的非字符数据,如下:

我们只需要在scanf函数下增加getchar函数来除去' \n '即可。

但当我们将关键词置换一下,就有了如下结果:

 我们发现,又出现了刚才的问题,没有任何确认就返回“关键词确认失败”,因为我们只有一个getchar,只能除去一个字符,而其余的”123\n“留在了缓冲区

 这样在下次getchar接收数据的时候会接收到不等于Y的数据,则会立马返回“关键词确认失败”

当这样情况时,我们就可以利用循环除去缓冲区的剩余字符,让得最后一个getchar接收数据时只能重新从键盘读取而不是缓冲区读取

应用循环知识来反复清空缓存区的数据以达到目的,便可以达到我们的目标。

②更换函数

 除去上面的办法,碰到要求输入空格相隔的字符串数据时,我们可以使用一新的函数——gets函数,依旧是来先学习它的相关参数和用法

 

接收一个char类型的指针参数,从标准输入读取字符并输入,碰到换行符或EOF(文件结束标志)则结束数据读取。

是的,gets函数只有碰到文件结束或者换行符才会读取结束——也就是可以读取任意数目的的空格字符

那么我们就可以这么更改我们的代码:

 可以清洗发现,只需更改scanf函数为gets函数即可解决此类问题,这也是一个很合适的解决方案。以上便是我对三种输入函数的基本的认知,在这里也记录学习完毕。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值