文章目录

  • 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. conrtex 和 ARM 的关系
  2. Java中文问题详解
  3. java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...
  4. C语言实现1~100的和(三种循环)
  5. 解决办法:安装cuda时一直失败(如提示Reboot required to continue)
  6. android sqlite SQLiteDatabase
  7. 光环PMP 疑难点辨析
  8. 电力拖动自动控制系统_电气工程及其自动化为什么这么火!原因有这些,建议收藏...
  9. ThoughtWorks培训感想
  10. WPF 特殊符号集合
  11. c# NPOI按模板导出
  12. 在不规则四边形的内部随机一个点
  13. pdf翻译器哪个好?这几个pdf翻译软件能支持一键翻译
  14. Dagger2利器系列二:懒/重加载+Component 的组织关系
  15. html5怎么做京东表格,HTML+CSS+PS 编写京东商城首页
  16. 吐血推荐 36招搞定电脑一切难题
  17. python批量裁剪图片_python批量剪切图片实现代码
  18. 患癌女孩冯莹的爱情梦想
  19. ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
  20. 小型趋势指标、中型趋势指标和主要趋势指标

热门文章

  1. python爬取手机微信_Python爬取微信好友
  2. Toad:一款基于 Python 的开源评分卡神器
  3. 编译原理中间代码生成--java实现
  4. 会计初级可以自己报名吗_初级会计考试可以自学吗?我刚完成报名
  5. php 心电图,用ps简单制作漂亮的心电图文字效果
  6. java爬虫 抓取知乎,java爬虫抓取知乎推荐总是乱码
  7. 【Flink实战系列】Flink SQL 之 Session Window 的用法
  8. 电影票小程序插件 电影票CPS插件 电影票微信小程序插件
  9. Spark 启动报错时报错 java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$.empty()Lscala/collect
  10. 记录一次微信卡包模板消息踩坑问题