当前位置:   article > 正文

C语言不同输入的异同和特点(scanf()、getchar()、getch()、gets())_c语言中的scanf和getchar和getc和gets区别

c语言中的scanf和getchar和getc和gets区别

这篇文章主要介绍了C语言scanf()、getchar()、getch()、gets()几种输入方法的特点,其中的不少细节在C语言初学时期极为有用,可以避免遇到不少问题。

 输入 scanf

  1. scanf默认的分割符是所有的空白字符,即指空格(space),回车(enter)和指标符(table),空格 或 回车符 会遗留在缓冲区。(造成的影响看下面例子)

因为scanf()方法遇到非字符的时候会结束从控制台的获取,所以在输入’a’后,按下 ‘回车(enter)’ 的同时,将’a’这个值以字符的形式赋值给了类型为 ‘char’ 的 ‘a’ ,将’回车(enter)’ 保存在控制台输入的缓冲区,然后继续执行下一段输出代码,然后又要求用户输入。此时,因为上一次被使用过后的字符串被保存在缓冲区,现在scanf()方法从控制台的缓冲区获取上一次被使用过后的字符串,并只截取第一个字符:’回车(enter)’,就会出现如下情况(第二个scanf好像没有起作用):

 

 

但是如果使用getchar()先将缓存中的回车读取,就可以输入第二个字符了:

 

      2. scanf默认的分割符是所有的空白字符,所以不能直接输入带空格的字符串。scanf函数在输  入整型数据时不能接受空格、制表符Tab、回车等,因为scanf在处理对字符数据的输入时,既不会忽略前导空白字符,默认也没有任何分隔字符。所有的字符,包括空白字符都会被当成输入字符

但scanf对于字符串和对整数的输入,会忽略前导的空白字符,而且默认的分隔符是所有的空白字符。

 

 

输入 getchar()

  1. getchar()是stdio.h中的库函数它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了,第一次getchar()时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar()再执行时就会直接从缓冲区中读取了。
  2. 键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到’\n’.
  3. 当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。即回车是用户输入结束的标志,同时也会将回车字符也放在缓冲区中,此时getchar才开始从键盘缓冲区中读取数据,包括回车符。

输入 getch()

  1. getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回, getch返回值是用户输入的ASCII码,出错返回-1.输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行.

输入 gets()

  1. gets() 从标准输入设备读取字符串,以回车结束读取,使用'\0'结尾,回车符'\n'被舍弃没有遗留在缓冲区。
  2. 可以用来输入带空格的字符串
  3. 可以无限读取,不会判断上限,因此使用gets不安全,可能会造成溢出

这是我的在初学阶段为应对C语言二三级和蓝桥杯所做的简短的笔记和总结,如果有用希望各位可以关注支持。如果各位觉得模糊,可以再看一下我列出的前辈们的文章,是我在学习和总结过程中参考过的,会更详细。

如有不足请批评指正,谢谢。

参考:

(13条消息) C语言中scanf与分隔符(空格回车Tab)_bobopeng的博客-CSDN博客_scanf分割字符
 (13条消息) C语言 getchar()原理及易错点解析_66Kevin的博客-CSDN博客_c语言getchar

(13条消息) 关于C语言中getchar()的详细使用_Dormant7的博客-CSDN博客_c语言getchar()的功能

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/编程冒险家/article/detail/62711
推荐阅读
相关标签
  

闽ICP备14008679号