scanf()、gets()、getchar()函数的学习笔记
2015-11-05 10:34
267 查看
一、 scanf()
1. scanf()函数可以读入单个字符,如果想连续读入两个单个字符则易出错。
char c1,c2;
scanf("%c",&c1);
scanf("%c",&c2);
printf("%c",c1);
printf("%c",c2);
当从终端输入a、回车时,程序就已经执行完了。
原因:scanf()是从输入流缓冲区中取数据,在scanf()取数据前,输入流缓冲区中已经有a和回车两个字符了,因此第二个scanf()函数直接读取了回车值。
2. scanf()函数读入字符串时,遇到空格、回车、TAB时会认为输入结束,而且不会讲空格、回车、TAB键读入或进行转换,因此这些字符还继续停留在输入流缓冲区中。
因此输入有空格、回车时要谨慎使用scanf()函数。
二、gets()
scanf()函数无法读入空格,而gets()函数则可以。
gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
使用strlen()求gets()函数读取的字符串长度时,最后的null值(即‘\0’)不计算在内。
三、getchar()
getchar()函数从输入流中获取一个字符,回车符不会被读入或转换而是继续停留在输入流缓冲区中。
-------------------------------------
因此,为了避免输入流缓冲区中垃圾数据对后续读入的影响,需要清空缓冲区。
方法一:使用函数fflush(stdin)
方法二:scanf("%[^\n]",string)
1. scanf()函数可以读入单个字符,如果想连续读入两个单个字符则易出错。
char c1,c2;
scanf("%c",&c1);
scanf("%c",&c2);
printf("%c",c1);
printf("%c",c2);
当从终端输入a、回车时,程序就已经执行完了。
原因:scanf()是从输入流缓冲区中取数据,在scanf()取数据前,输入流缓冲区中已经有a和回车两个字符了,因此第二个scanf()函数直接读取了回车值。
2. scanf()函数读入字符串时,遇到空格、回车、TAB时会认为输入结束,而且不会讲空格、回车、TAB键读入或进行转换,因此这些字符还继续停留在输入流缓冲区中。
因此输入有空格、回车时要谨慎使用scanf()函数。
二、gets()
scanf()函数无法读入空格,而gets()函数则可以。
gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在str指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。
使用strlen()求gets()函数读取的字符串长度时,最后的null值(即‘\0’)不计算在内。
三、getchar()
getchar()函数从输入流中获取一个字符,回车符不会被读入或转换而是继续停留在输入流缓冲区中。
-------------------------------------
因此,为了避免输入流缓冲区中垃圾数据对后续读入的影响,需要清空缓冲区。
方法一:使用函数fflush(stdin)
方法二:scanf("%[^\n]",string)
相关文章推荐
- 几个常用的linux快捷键和shell知识
- Java代码性能优化总结
- 【HDU1572】【旅行商问题 状压DP 数据小全排列暴力】下沙小面的(2)
- linux-grep 命令详解!
- Linux基础之/bin、 /sbin、/ usr/bin,、/usr/sbin的用处
- 99 CLLocation的基本使用
- C语言逗号表达式 (100,200,500)(a,b,c)
- 建行E商贸通支付开发系列之六(生产环境与总结)
- Ajax总结
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- UIImageView——IOS显示图片的利器
- linux-sed命令详解!
- iOS字体设置
- emmet缩写大全
- emmet中的用法
- 解决Cannot change version of project facet Dynamic web module to 2.5
- 打印机如何取消打印任务
- 【总结】10月训练赛第7场
- 关于window.onload加载的多种解决方案
- 通过UIImageRenderingMode改变工程图片颜色