C语言 getchar()函数详解
getchar()函数机制
getchar()函数实际上是int getchar(void),所以它返回的是ASCII码,所以只要是ASCII码表里有的字符它都能读取出来。在调用getchar()函数时,编译器会依次读取用户键入缓存区的一个字符(注意这里只读取一个字符,如果缓存区有多个字符,那么将会读取上一次被读取字符的下一个字符),如果缓存区没有用户键入的字符,那么编译器会等待用户键入并回车后再执行下一步 (注意键入后的回车键也算一个字符,输出时直接换行)。
来几个例子:
int main()
{char ch;printf("请输入字符:"); //1 2 回车scanf("%c", &ch); // 读取 1printf("%c", getchar()); //输出 2
}
运行实例:
第一个字符1被char ch读取,所以getchar()依次读取下一个未读取字符2
int main()
{char ch;printf("请输入字符:"); //1 回车scanf("%c", &ch); //读取 1printf("|1%c1|", getchar()); //读取并输出 回车
}
运行实例:
char ch读取第一个字符1,注意:我们说过,用户键入的回车也算一个字符,所以这里getchar()把回车读取了,输出时体现为换行
int main()
{char ch;printf("请输入字符:");//1 2 3 回车scanf("%c", &ch);// 读取 1printf("%c", getchar());// 读取并输出 2printf("%c", getchar());// 读取并输出 3printf("%c", getchar());// 读取并输出 回车
}
运行实例:
因为回车也算一个字符,所以如果在前面先要调用scanf()这种读取字符的函数后再键入新值调用getchar()(因为想要scanf()调用必须回车才能执行,就多了一个回车在缓存区中),建议清空缓存区再使用getchar(),不然getchar()会把前面回车也读取出来。注:可以使用fflush(stdin)清空缓存区(有的编译器用不了),推荐C语言基本语法:
char c_tmp;
while ((c_tmp = getchar() != '\n') && c_tmp != EOF);
例子:
int main()
{char ch[3];printf("请输入字符ch:");// 1 2 3 回车scanf("%s", &ch);// 读取123printf("字符ch的值:%s\n",ch);//输出 字符ch的值:123char c_tmp;while ((c_tmp = getchar() != '\n') && c_tmp != EOF);printf("请输入字符:");// 1 2 3 回车printf("%c", getchar()); //由于清空了缓存区,第一个getchar()并没有读取123之后的回车,而是读取的1printf("%c", getchar());// 读取并输出2printf("%c", getchar());// 读取并输出3
}
运行实例:
如果没有清空缓存区呢?(结果可能有点不好理解,多分析一下)
int main()
{char ch[3];printf("请输入字符ch:");// 1 2 3 回车scanf("%s", &ch);// 读取123printf("字符ch的值:%s\n",ch);// char c_tmp;// while ((c_tmp = getchar() != '\n') && c_tmp != EOF);printf("请输入字符:");// 1 2 回车printf("%c", getchar()); //第一个getchar()读取了123之后的回车,体现在printf("请输入字符:");中并没有换行符却换行了。printf("%c", getchar());// 读取并输出 1printf("%c", getchar());// 读取并输出 2
}
运行实例:
总结
getchar()在初次接触和使用时,大多数出错就是对于回车字符的读取。在调用时注意就会避免很多麻烦。调用前清空缓存区会是很好的解决办法。所以scanf()的优点就体现出来了,scanf()只有在格式化为"%c"时会读取回车符,但缺点也是无法读取含空格等字符的字符串并存储到字符数组中(严格意义上讲并不是字符串,可以理解为含格式化"%s"无法完整读取的字符组合,例如"gy gr 134 4353freg 32"这种中间有空格的)
C语言 getchar()函数详解相关推荐
- c语言memset对应java,C语言memset函数详解
C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...
- R语言which函数详解以及Rcpp改写
R语言which函数详解以及Rcpp的改写 引言 which 函数的介绍 which函数的一些小例子 1 2 which函数的改进以及时间对比 引言 首先来介绍一下R语言which函数的作用:whic ...
- 【C语言】函数详解(入门到进阶)
目录 前言 一.什么是函数 二.函数的构成 三.函数的调用和声明 四.函数的参数 五.函数的递归 总结 写在后面 前言 最近帮家里的小朋友整理一些学习C语言的知识点 有整体入门基础文章--[C语言]拯 ...
- [C语言] scanf 函数详解多组输入法和gitee 自荐
自荐 gitee>>> C语言学习练习: C语言学习练习 上面是我的gitee C语言仓库链接,欢迎大家来看看我写的代码.!(◦˘ ³(♡ŐωŐ♡)(给大家推荐gitee(码云)这个 ...
- C语言strlen函数详解
strlen函数详解 一.strlen函数简介 1.函数原型 2.注意事项 二.strlen函数模拟实现 1.计数器方式 2.递归实现 3.指针-指针实现 一.strlen函数简介 1.函数原型 si ...
- C语言scanf函数详解
函数名: scanf 功 能: 运行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()函数是通用终端格式化输入函数,它从标准输入设 ...
- c语言 指针函数 详解,[NOTE-C]C语言指针详解(一)
C语言指针让一切想法变成可能,强转和指针可以看做一项呼风唤雨的利器,但是C语言中指针应用又需要格外的小心,其更灵活的利用内存,因为不当的应用可能引起各种异常,这篇文章就是让我们一起来认识C指针,更好的 ...
- C语言scanf函数详解和示例
文章目录 一.数据输入 二.断章取义 三.scanf输入 1.输入整数 2.输入字符 3.输入浮点数 4.输入字符串 5.输入多个内容 6.示例(book13.c) 四.注意事项 五.获取视频教程 六 ...
- c语言string函数详解
linux kernel code : kernel/lib/string.c strsep,strtok,strchr ,strstr ...... PS:本文包含了大部分strings函数的说明 ...
最新文章
- 边缘AI是内存技术发展的催化剂
- labview在2048中添加时间滚动条_Axure 教程:不可见滚动条的页面滚动效果
- Struts文件上传包含修改文件上传参数,多文件上传
- 原python基础概念整理_Python从头学之基础概念整理
- mysql自动dump脚本_MySQL--简单mysqldump脚本
- Flash AS3.0实例教程:构建简单的声音可视化程序(波型图)
- Codeforces Round #382 (Div. 2) D. Taxes 歌德巴赫猜想
- [转]Resource for Windows Phone 7
- python3.7安装opencv4.1_树莓派4的opencv4.1.0--python3.7的开发环境安装
- HTML5 之 FileReader(图片上传)
- 一种免费下载专利的方法
- android 安装apk 代码,Android 8.0安装apk的实例代码
- 【转载】APP通用测试用例大全
- 淘宝无货源自动群控软件一键铺货接口对接说明
- Default clip could not be found in attached animations list...must be marked as legacy解决办法
- 如何对多个文件夹进行重命名?这个方法可以批量修改文件夹名、给文件夹名加统一前缀或后缀
- 计算机专业怎么说才能高大上,搞笑!如何把自己的职业说的高大上
- 移动端天气系统--【下雨】效果之【雨滴】的实现和分析
- php 问卷调查,php 问卷调查结果统计
- python3 打包后执行报错failed to execute script ***
热门文章
- win10 nas搭建_零起步自建家用NAS
- 解决Windows10系统ping外网不通的问题
- visio设置图片默认大小_教大家Visio怎么随意调节图形的大小
- python123app_Python实现iOS APP 自动化打包
- docker 使用tar安装mysql_使用docker安装mysql服务
- 伙伴云品牌升级:logo换新,调性更潮
- 关于C语言的system函数用法
- 关于修复mp4文件损坏的过程小记
- 更改计算机一级密码,详细教您如何更改win10系统电脑密码
- 最佳实践 | 用腾讯云AI人像变换给自己一次“跨越年龄的体验”