七.getchar 和 scanf
目录
准备
1.getchar函数
1.1特点:
1.2getchar在缓存区接收字符
代码
显示
原因:
2.scanf
2.1读入字符
代码
显示
2.2读字符串
代码
显示
原因
3.扩展
3.1gets()函数
3.2数组越界
4.对比
4.1getchar优点
4.2scanf优点
5.注意
准备
- 空白字符:空格符、换行符(\n)
- 转换说明:%d、%s、%c等
1.getchar函数
C语言提供的一种输入单个字符的方法
1.1特点:
- 每次调用getchar函数时,它会读入一个字符并将其返回,必须使用赋值(=)操作将其存储到变量中。
- getchar返回的为接收字符的ASCII码值,返回一个int类型而不是char
我们使用证明代码如下:
输入的是4,而a显示的值却是52,查看上面的ASCII码表,4对于的ASCII码值为52。所以使用getchar变量得到的是对应字符的ASCII码值。
1.2getchar在缓存区接收字符
代码
int main()
{int a = 0;while ((a = getchar()) != EOF){printf("%c\n", a);}return 0;
}
显示
其中字符a和c之间有三行空白。
原因:
首先,在键盘中输入字符是存储到内存缓冲区,getchar函数一次只能接收一个字符。
我们是先输入a后又进行了换行操作时'\n'也被输入,此时变量a被赋值为字符'a'的ASCII码值,缓冲区中还有'\n',在循环内使用printf输出了字符'a',之后printf内的换行符进入第一个空格。
第一轮循环结束后,getchar在缓存区内取出'\n',之后printf再次输出两个换行符,一个是变量a内的一个是printf后的,共三个换行,三行空白。
2.scanf
转换说明%c允许scanf函数对单个字符进行行读(可对如何字符读取)
转换说明%s允许scanf函数把字符串读入字符数组
2.1读入字符
代码
int main()
{char a = 0;while (scanf(" %c", &a) != EOF){printf("%c\n", a);}return 0;
}
使用scanf函数接收字符时,也存在接收空白字符的情况,
为了强制使scanf函数在读入字符前跳过空白字符,需要在格式串中的转换说明%c前加上一个空格
显示
2.2读字符串
代码
int main()
{char a[10] = { 0 };scanf("%s", a);printf("%s\n", a);return 0;
}
显示
原因
scanf函数会跳过空白字符,然后读入字符并且存储到数组中,直到遇到空白字符为止,scanf函数读入字符串永远不会包含空白字符。
因此,scanf函数通常不会读入一整行输入。
3.扩展
3.1gets()函数
- 因为安全方面的原因,从C11起被废除了
- gets函数不会再开始读字符串之前跳过空白字符(scanf会跳过)
- gets函数会持续读入,直到找到换行符才停止(scanf函数会在任意空白字符处停止)
- gets函数会忽略换行符,不会把它存储到数组中,并用空字符('\0')代替换行符
3.2数组越界
把字符读入数组时,scanf函数和gets函数都无法检测数组合适被填满。当数组越界时,会导致未定义的行为。
可以使用%ns代替%s,数字n指出可以存储的最多字符数。
4.对比
4.1getchar优点
- getchar函数比scanf函数的执行速度更快
原因:
- scanf函数是设计用来按不同的格式读不同类型数据的,getchar比scanf要简单的多
- 为了额外的速度提升,通常getchar函数是作为宏来实现的
4.2scanf优点
- 相对与getchar可以更方便写入字符串
- 可以改变转换说明读取输入个类型的数据
5.注意
在换行后使用getchar和scanf("%c")都是危险的动作,会造成数组或变量在读取数据时的失败。
千万小心。
七.getchar 和 scanf相关推荐
- getchar、scanf以及缓冲区的概念
1.getchar()是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了. getch()和getche()是conio. ...
- C++中cin、cin.get()、cin.getline()、getline()、gets()、getchar()、scanf()等函数的用法
转自:https://www.cnblogs.com/luolizhi/p/5746775.html 1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: #include & ...
- 浅谈getch(),getche(),getchar(),gets(),scanf()的区别
getch(),getche(),getchar(),gets(),scanf()的区别,综合很多博客的文章. getch()和getchar() getchar()是C的标准库函数,包含在头文件&l ...
- getchar与scanf的区别
getchar getchar先读取一个字符放到ch里面去,如果这个字符不等于EOF,就进入循环,打印这个字符.当getchar读到文件末尾或者结束时,它会返回一个EOF,此时结束循环. 输入A,输出 ...
- C语言中阶第一篇:分支和循环语句透析,包含getchar和scanf的详细介绍(本篇循环只到while)
业精于勤荒于嬉,行成于思毁于随. 在笔者初阶的文章里,已经介绍过分支和循环语句,不过由于是初阶,所以并不细致,今天我们正式打开了中阶的大门,开始一步一步的深入C语言的学习. C语言是结构化的程序设计语 ...
- 【C语言】C语言学习整理-putchar,printf,getchar,scanf定义及区别
1.定义 花一点时间认真阅读,这篇文章应该会让您多理解一点东西. 1.getchar getchar函数是字符输入函数,其功能是从键盘上获取一个输入字符. 读取方式: 从stdio(输入)流中读字符, ...
- 关于fgetc,getc,getchar和scanf的一些小知识
在C语言中,一个char类型的字符可以用int型的数参照ASCII表来表示,比如 char ch = 49; printf("%c", ch); 这段代码会输出1,因为字符**'1 ...
- 探讨getchar与scanf的区别
前言 说到scanf与getchar,想必大家都不陌生,在学习C语言的第一天起我们就开始接触它们,但我们对它们在输入方面可能有点模棱两可,分不清scanf与getchar真正有什么区别,下面就来分别探 ...
- C语言笔记 · 输入函数(scanf(),getchar(),getche(),getch(),gets())
目录 输入函数 1. scanf() 1.1 scanf()理解 1.2 scanf()输入字符串 2. getchar() 3. getche() 4. getch() 5. gets() 总结 备 ...
最新文章
- 谷歌浏览器安卓版_谷歌翻译(在线翻译)下载-谷歌翻译下载安装安卓版v5.12.0...
- Python 引用全局变量提示:local variable referenced before assignment. 问题解决办法,global使用方法介绍
- jQuery获取元素内容
- hive(1)——用mysql进行元数据存储
- 曲线均匀分布_曲线篇:深刻理解B 样条曲线(下)
- java程序单引号报错,javapoigetInpuStream报错br/是这样的, 爱问知识人
- Windows编程—控制面板程序显示信息修改(程序图标、名称、链接等)
- java 最大子数组_[剑指offer题解][Java]连续子数组的最大和
- 使用js获取select选中文本
- 从入门到放弃之promise用法(上)
- pkuseg 和 jieba 分词对比测试,结果出乎意料...
- Go函数和方法的区别
- ftp服务器要什么配置文件,ftp服务器要求什么电脑配置
- 你吃的外卖,半年前就做好了
- Mark loves cat
- 传统的企业如何实现数字化转型?
- 二维数组中的查找(两种解法,各有千秋)
- GraphX与GraphLab、Pregel的对比
- Linux 配置nginx和php代理 ip访问
- seata-server