【C语言】输入函数们的盘点:scanf、getchar、getch、getche、gets
文章目录
- 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相关推荐
- C语言输入不同字符 屏幕显示不同,c语言中易混淆的东西 1 getch() getche()和getchar()之间区别 scanf sscanf (fscanf fgets fgetc )...
getch() getche()和getchar()之间区别 发布人 : IT专家 发布时间 : 2009-10-21 07:52:23.0 首先不要忘了,要用getch()必须引入头文件conio. ...
- C语言笔记 · 输入函数(scanf(),getchar(),getche(),getch(),gets())
目录 输入函数 1. scanf() 1.1 scanf()理解 1.2 scanf()输入字符串 2. getchar() 3. getche() 4. getch() 5. gets() 总结 备 ...
- 深入了解scanf() getchar()和gets()等函数之间的区别
---------------------------------------------------- | 问题描述一:(分析scanf()和getchar()读取字符) | --------- ...
- 浅谈getch(),getche(),getchar(),gets(),scanf()的区别
getch(),getche(),getchar(),gets(),scanf()的区别,综合很多博客的文章. getch()和getchar() getchar()是C的标准库函数,包含在头文件&l ...
- [ZZ]深入了解scanf()/getchar()和gets()等函数
原文链接:http://dev.firnow.com/course/6_system/linux/linuxjq/20100113/190113.html | 问题描述一:(分析scanf()和get ...
- C语言 —— 你不得不知道的 scanf 的高级用法
如果你想让自己的输入更加炫酷.更加个性化.更加安全,那么还需要学习 scanf() 的高级用法,这才是大神和菜鸟的分水岭. 好了,言归正传,我们分三个方面讲解 scanf() 的高级用法. 1) 指定 ...
- scanf(),getchar(),gets()进一步理解
#include<iostream> #include<stdlib.h> using namespace std; int main(){char c1,c2; //scan ...
- 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())
getch() vs getchar() getch()的功能是从键盘输入一个字符,但不在屏幕上显示.在这里,该行的作用是等待,只有当用户从键盘敲任一键时,程序才继续执行, 因此用户可利用这个等待时间 ...
- Go 语言 fmt.Scanln() 与 fmt.Scanf() 包使用
Go 语言 fmt.Scanln() 与 fmt.Scanf() 包使用 需要接收用户输入的数据,就可使用键盘输入语句来获取. 下面讲述两种方法的使用: fmt.Scanln()的使用: 先声明需要的 ...
最新文章
- conrtex 和 ARM 的关系
- Java中文问题详解
- java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...
- C语言实现1~100的和(三种循环)
- 解决办法:安装cuda时一直失败(如提示Reboot required to continue)
- android sqlite SQLiteDatabase
- 光环PMP 疑难点辨析
- 电力拖动自动控制系统_电气工程及其自动化为什么这么火!原因有这些,建议收藏...
- ThoughtWorks培训感想
- WPF 特殊符号集合
- c# NPOI按模板导出
- 在不规则四边形的内部随机一个点
- pdf翻译器哪个好?这几个pdf翻译软件能支持一键翻译
- Dagger2利器系列二:懒/重加载+Component 的组织关系
- html5怎么做京东表格,HTML+CSS+PS 编写京东商城首页
- 吐血推荐 36招搞定电脑一切难题
- python批量裁剪图片_python批量剪切图片实现代码
- 患癌女孩冯莹的爱情梦想
- ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
- 小型趋势指标、中型趋势指标和主要趋势指标
热门文章
- python爬取手机微信_Python爬取微信好友
- Toad:一款基于 Python 的开源评分卡神器
- 编译原理中间代码生成--java实现
- 会计初级可以自己报名吗_初级会计考试可以自学吗?我刚完成报名
- php 心电图,用ps简单制作漂亮的心电图文字效果
- java爬虫 抓取知乎,java爬虫抓取知乎推荐总是乱码
- 【Flink实战系列】Flink SQL 之 Session Window 的用法
- 电影票小程序插件 电影票CPS插件 电影票微信小程序插件
- Spark 启动报错时报错 java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$.empty()Lscala/collect
- 记录一次微信卡包模板消息踩坑问题