把基本输入 scanf getchar gets 的区别

把基本输入 scanf getchar gets 的区别

在写控制台程序的时候,难免会遇到各种各样的输入格式读取,下面比较一下 scanf  getchar 和 gets的区别

首先我们要知道,当用户从键盘键入一个字符串的时候,就会在IO缓冲区内写入信息,这个缓冲区是一个队列,  我们用下面几段代码来检验一下,不同函数对缓冲区的读取效果

这一段代码是测试这三个函数到底读取了哪些字符

代码如下

这段代码中,首先用注释掉的scanf来接受输入  输入 test加回车后 输出的只有 test  输入test+tab也是同样的输出,这说明 scanf读取缓冲区时,每一次读取读到TAB 和 ENTER 前 (空格就不用说了 当然不读 ) 当scanf被调用时缓冲区里最前面的元素为有回车和空格符 或TAB scanf直接跳过他们不读

同理测试 gets  发现 gets每一次读取到一个回车前,TAB 和SPACE 它都读。当gets被调用时,缓冲区内第一个元素为ENTER时,gets不读这个ENTER

再测试getchar 简单修改代码即可测试  getchar 会读取所有的字符,但是只有当遇到回车的时候才会输出  这种性质叫务回显,而与它不同的 getch就有回显

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

7 − 2 =