文章目录

  • C 库函数 - scanf():
  • C 库函数 - getchar():
  • getch:
  • getche:
  • getchar(),getch(),getche()比较:
  • gets:
  • 参考链接:

C 库函数 - scanf():

功能:
scanf函数从标准输入 stdin 读取格式化输入。
和getchar类似,首先从stdin缓冲区读取字符,如果缓冲区有符合格式要求的数据,及获取数据,返回给程序,指针指向下一个数据,函数结束;如果缓冲区没有符合要求的数据,则等待从键盘输入数据,并且必须以回车键结束,输入的数据存入stdin缓冲区,然后scnaf()从缓冲区获取一个数据并返回,函数结束。

它被称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。即“通过键盘给程序中的变量赋值”。

头文件:
scanf函数是一个标准库函数,它的函数原型在头文件“stdio.h”中,因此在使用scanf函数时要加上#include <stdio.h>。

一般形式:
scanf函数的一般形式为:scanf(“格式控制字符串”, 地址表列);
功能:将从键盘输入的字符转化为“格式控制字符串”所规定格式的数据,然后存入以地址表列的值为地址的变量中。
其中,格式控制字符串可以说明输入数据的类型。例如:
%d表示十进制整数(int *)、%s表示字符串(char *),这将读取连续字符,直到遇到一个空格字符(空格字符可以是空白、换行和制表符)。
地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。例如:&a、&b分别表示变量a和变量b的地址。scanf函数在本质上也是给变量赋值,但要求写变量的地址。

说明:
scanf()函数接收输入数据时,遇以下情况结束一个数据的输入:
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。

返回值:
如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。


C 库函数 - getchar():

功能:
int getchar()从标准输入 stdin 获取一个字符(一个无符号字符)。这等同于 getc 带有 stdin 作为参数:getc(stdin)。getchar()非真正函数,而是getc(stdin)宏定义。
getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab)。所以可以用getchar来清除scanf留在缓冲区中的回车。

当程序调用getchar时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符,且将用户输入的字符回显到屏幕。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

头文件:
使用getchar函数时要加上#include <stdio.h>。

返回值:
该函数以无符号 char 强制转换为 int 的形式返回读取的字符。
返回类型为int型,为用户输入的ASCII码或EOF。
如果到达文件末尾或发生读错误,则返回 EOF。


getch:

功能:
从stdio流中读取一个字符,不显示在命令行(不回显),很多人用来模拟“按任意键继续的效果”。
当用户按下某个字符时,函数自动读取,无需按回车。

原型:
int getch(void)

头文件:
#include <conio.h>

和getchar区别:
getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。
输入的字符不会回显在屏幕上。
getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符。

说明:
getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。

返回值:
getch返回值是用户输入的ASCⅡ码,出错返回-1。


getche:

功能:
getche()读取从控制台输入的字符,并将输入的字符立即显示在控制台。
也就是说,输入d,直接就输出d,不需要按回车键,即该函数不带缓冲区,且输入有回显。

原型:
int getche(void);

头文件:
#include <conio.h>

说明:
和getch一样,这两个函数经常用于交互输入的过程中完成暂停等功能。

返回值:
从控制台读取字符,并在控制台显示读取的字符ASCII码值。


getchar(),getch(),getche()比较:

相同点:
1.都不需要参数
2.功能一致:从输入设备获取一个字符并返回这个字符

不同点:

1.getchar()先将输入的字符保存在缓冲区,然后再从缓冲区读取这个字符,是间接读取
2.getche()和getch()不需要将输入的字符保存在缓冲区,而是即输即取,也就是说,一输入一个字符,它立即直接读取

getchar() 会等待用户按下回车键才开始读取,而 getche()、getch() 会立即读取。这是因为 getchar() 带有缓冲区,用户输入的数据会暂时保存到缓冲区,直到按下回车键才开始读取;而 getche()、getch() 不带缓冲区,只能立即读取。


gets:

功能:
char* gets(char* buffer)
从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。


参考链接:

https://zhuanlan.zhihu.com/p/343532127

【C语言】输入函数们的盘点:scanf、getchar、getch、getche、gets相关推荐

  1. C语言输入不同字符 屏幕显示不同,c语言中易混淆的东西 1 getch() getche()和getchar()之间区别 scanf sscanf (fscanf fgets fgetc )...

    getch() getche()和getchar()之间区别 发布人 : IT专家 发布时间 : 2009-10-21 07:52:23.0 首先不要忘了,要用getch()必须引入头文件conio. ...

  2. C语言笔记 · 输入函数(scanf(),getchar(),getche(),getch(),gets())

    目录 输入函数 1. scanf() 1.1 scanf()理解 1.2 scanf()输入字符串 2. getchar() 3. getche() 4. getch() 5. gets() 总结 备 ...

  3. 深入了解scanf() getchar()和gets()等函数之间的区别

    ---------------------------------------------------- | 问题描述一:(分析scanf()和getchar()读取字符)   | --------- ...

  4. 浅谈getch(),getche(),getchar(),gets(),scanf()的区别

    getch(),getche(),getchar(),gets(),scanf()的区别,综合很多博客的文章. getch()和getchar() getchar()是C的标准库函数,包含在头文件&l ...

  5. [ZZ]深入了解scanf()/getchar()和gets()等函数

    原文链接:http://dev.firnow.com/course/6_system/linux/linuxjq/20100113/190113.html | 问题描述一:(分析scanf()和get ...

  6. C语言 —— 你不得不知道的 scanf 的高级用法

    如果你想让自己的输入更加炫酷.更加个性化.更加安全,那么还需要学习 scanf() 的高级用法,这才是大神和菜鸟的分水岭. 好了,言归正传,我们分三个方面讲解 scanf() 的高级用法. 1) 指定 ...

  7. scanf(),getchar(),gets()进一步理解

    #include<iostream> #include<stdlib.h> using namespace std; int main(){char c1,c2; //scan ...

  8. 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())

    getch() vs getchar() getch()的功能是从键盘输入一个字符,但不在屏幕上显示.在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行, 因此用户可利用这个等待时间 ...

  9. Go 语言 fmt.Scanln() 与 fmt.Scanf() 包使用

    Go 语言 fmt.Scanln() 与 fmt.Scanf() 包使用 需要接收用户输入的数据,就可使用键盘输入语句来获取. 下面讲述两种方法的使用: fmt.Scanln()的使用: 先声明需要的 ...

最新文章

  1. hive遇到FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误...
  2. 300 行代码带你搞懂 Java 多线程!
  3. linux 自定义shell命令,如何在Linux中自定义bash命令提示符
  4. 二叉树的直径—leetcode543
  5. python二维数组遍历输出每行最大值_如何在二维数组中找到每行的最大值?
  6. 通过引入switch表达式来增强Java switch语句
  7. Shell 脚本中如何使用make命令
  8. 《springcloud超级入门》Spring Cloud和Dubbo的区别及各自的优缺点《三》
  9. Ambari安装之部署单节点集群
  10. 干货丨常用JS前端开发框架有哪些?
  11. Databinding在自定义ViewGroup中如何绑定view
  12. 如何参加GoToMeeting在线会议
  13. cassandra数据库可视化工具
  14. 【虚幻引擎UE】UE5 fbx文件导入gltf文件在线/本地导入和切换(含骨骼动画)
  15. autorunner测试java_AutoRunner自动化测试工具
  16. 既不是研发顶尖高手,也不是销售大牛,为何偏偏获得2万RMB的首个涛思文化奖?...
  17. RVDS 3.1 下载地址及破解方法
  18. opengl画圆柱体、圆锥等并使用四元数旋转
  19. 吃内存狂魔?微信官方工具来了:深度清理缓存
  20. PS2018学习笔记(03-18节)

热门文章

  1. android10获取相册失败的解决方式
  2. C# 开发DirectX.DirectSound录音在Win10兼容解决方法
  3. 酒店管理软件测试用例,酒店管理系统-测试用例.pdf
  4. SpringMVC教程(一)
  5. 中国太空传感器市场现状研究分析与发展前景预测报告(2022)
  6. 高精度加法C++(acwing复习题)
  7. Redis入门到精通保姆级教程 ---> 【爆肝五万字】
  8. Windows Server 2003 介绍
  9. python 深度学习环境安装(tensorflow-gpu)
  10. 信息安全服务资质认证CCRC证书‖中国网络安全审查技术与认证中心