C语言gets()与scanf()
来源:互联网 发布:淘宝电子商务模式分析 编辑:程序博客网 时间:2024/05/18 05:03
先列举几种情况,以下的代码只有输入方式有变化:
1.
#include<string>#include<math.h>using namespace std;int main(){ char m[33]; char n[33]; gets(n); gets(m); printf("%s",m);//正常输出 return 0;}
2.
#include<string>#include<math.h>using namespace std;int main(){ char m[33]; char n[33]; scanf("%s",n); gets(m); printf("%s",m);//输出为空 return 0;}
3.
#include<string>#include<math.h>using namespace std;int main(){ char m[33]; char n[33]; scanf("%s",n); scanf("%s",m); printf("%s",m);//正常输出 return 0;}
3.
#include<string>#include<math.h>using namespace std;int main(){ char m[33]; char n[33]; gets(n); scanf("%s",m); printf("%s",m);//正常输出 return 0;}
总结:
1. scanf以空格,回车,tab为输出结束标志,只读取结束标志之前的字符,所以结束标志仍然留在缓冲区内。
2. gets只以回车为结束标志,读取结束标志以及之前的字符,那么结束标志就不会留在缓冲区内(即吸收了缓冲区内的结束标志),但读取之后gets会把回车符换成’\0’。
所以,第一种情况,第一个回车符没有留在缓冲区内,所以第二次输入正常读取;
第二种情况,回车符留在了缓冲区内,第二次输入gets读取到了一个回车符即以为输入结束,然后再把回车符换成’\0’,所以读取到一个空字符串。
第三种和第四种情况,不管回车符在不在缓冲区内,scanf都不会读取,所以scanf读取正常,输出正常。
tips:cin和scanf很相似,所以当用c++风格的方式输入字符串时,可把cin理解为scanf,各种处理方式也相同。
1 0
- C语言gets()与scanf()
- 【C语言】scanf() 与 gets()
- C语言scanf与gets的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言-- gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- C语言 gets()和scanf()函数的区别
- Hadoop 基本概念
- ubuntu 14.04 下通过apt-get 安装jdk
- Git操作指令一
- windows下 excel打开utf8的csv乱码
- 兄弟连百度应用开发系列视频教程
- C语言gets()与scanf()
- 0310
- 信号处理——信号频域变换
- Java输入输出流
- 安卓scrollview和list view嵌套时的解决
- UICollectionView的Cell加载动画
- jquery与ajax的引用
- c# 代码常用 2017(为自己)
- android网络访问之HttpURLConnection vs OkHttp