#include<iostream>
#include<string>
using namespace std;
int main()
{char a[50],b[50],charr;//经测试,cin读入字符串,会识别空格和回车为截止,并且不会吞掉,//只是每次读的时候会从第一个不为空格/回车的字符开始读(因为加一个getchar不影响,加两个就影响了) //  ceshi:   1.qwe\nasd\n||//            2.qwe asd\n||//         3.   qwe asd\n||均正确! //输入:      asd\nqwe\n输出:asd**qwe**\n**//输入:\n\n\n\nasd qwe\n输出:asd**qwe** **//总结:缓冲区中,跳过了就是跳过了,getchar不会从头识别你是空格还是回车,因为你是先cin的a,然后getchar 所以比如cin读到东西了以后才能执行后面getchar语句,同时这时候缓冲区指针是cin读到的内容,所以你最开始输入多少个\n或者空格都无所谓的
//  cin>>a;charr=getchar();cin>>b;
//  cout<<a<<"**"<<b<<"**"<<charr<<"**"<<endl;//经测试,getline读入字符串,读入空格,会识别回车为截止,即不读入\n但是会吞掉(跳过)他(即将\n移出缓冲区,以防下次读入的时候直接\n了)(所以上来就\n,用cin不影响但是getline就影响了) //或理解成会将\n读入字符串,但是优化的时候将其换成\0,反正就是缓冲区和字符串中都没有这个\n //  不带getchar的ceshi: 1.qwe\nasd  2.qwe asd  均正确!//带getchar的ceshi:3.qwe asd\n \n||输出:qwe asd**** **//因为getchar只是读一个字符,不会将\n跳过
//  string s1,s2;
//  getline(cin,s1);
//  charr=getchar();
//  getline(cin,s2);
//  cout<<s1<<"**"<<s2<<"**"<<charr<<"**"<<endl;//经测试,scanf读入字符串,会识别空格和回车为截止,并且不会吞掉。 //  ceshi:    1.qwe\nasd\n||//            2.qwe asd\n||//         3.   qwe asd\n||均正确! scanf("%s",a);/*getchar()*/scanf("%s",b);cout<<a<<"**"<<b<<"**"<<endl;return 0 ;
 } 

下面是对字符的代码

#include<iostream>
using namespace std;
int main()
{char a,b;//经测试,cin读入字符,会识别空格和回车,并且会跳过回车 //  ceshi: 1.sd   2.s\nd   3.s d  均正确!
//  cin>>a>>b;
//  cout<<a<<"**"<<b<<"**"<<endl;//经测试,getchar读入字符,没有识别这一说了,并且不会跳过回车和空格//  ceshi: 1.sd   2.s\nd   3.s d  只有1正确!
//  a=getchar();
//  b=getchar();
//  cout<<a<<"**"<<b<<"**"<<endl;//经测试,getchar与 scanf结果完全相同 scanf("%c",&a);scanf("%c",&b);cout<<a<<"**"<<b<<"**"<<endl;return 0 ;} 

scanf和cin读字符串的时候回跳过缓冲区首的所有空格回车 但是gets getline会都读进去,

测试代码:

#include<iostream>
#include<cstdio>
#include<string>using namespace std;
int main()
{char a[100];string s;int n;cin>>n;gets(a);//换成scanf试试//scanf("%s",a); cout<<"****";cout<<a;cout<<"****"<<endl;//   getline(cin,s);和gets是一模一样的,,不需要试了
//  cout<<"****";
//  cout<<s;
//  cout<<"****"<<endl;return 0 ;
}

输入:

5\n||gets和scanf的结果就不一样了

5\n|| 结果与上一行对应的结果相同

总结:

scanf("%s",a);//cin>>a;  会从第一个不为空格、回车的地方开始,并且遇到空格回车就结束 ,并且将空格回车留在缓冲区中(所以后面如果用gets  则需要先跟一个getchar)

gets 从缓冲区第一个字符开始读(有啥读啥),一直读到第一个回车,并且把这个回车清除出缓冲区,(或理解成读成自己的字符串,再将其改成'\0'),所以gets好人性化啊!!不会给后面的读入留下什么后遗症。

综上所述 gets读的话,你上来就敲回车,就会结束程序了,但是如果scanf读的话,一直敲回车跟没敲一样,他还在等着你读第一个字符。


关于gets,cin.getline,getline

相比gets和cin.getline(str,10005);之下,getline(cin,str)就不这么友好,他和gets,cin.getline一样怕之前残留的 '\n' 但是不友好的地方在于(也就是唯一的区别在于)并不会帮忙把后面的'\n'吞掉,所以getline之后最好加一个getchar,而gets和cin.getline则不需要。

c/c++,字符,字符串,各种方式读入与对空格,回车的处理相关推荐

  1. 字符字符串的输入输出

    字符字符串的输入输出 作用 scanf("%c",&a);;getchar();;读入文章 gets();;getline();;读入一行 cin不能读入空格 scanf ...

  2. python使用字典格式化字符串-Python字符串格式方式 %s format()

    python中格式化字符串的方式有两种,一种是使用"%s"的方式,一种是str.format()的方式,接下来就对这两种方式做个介绍 1.%s的方式 两种用法,第一种是在字符串中使 ...

  3. 【Elasticsearch】十九种Elasticsearch字符串搜索方式

    1.概述 十九种Elasticsearch字符串搜索方式 刚开始接触Elasticsearch的时候被Elasticsearch的搜索功能搞得晕头转向,每次想在Kibana里面查询某个字段的时候,查出 ...

  4. 【Elasticsearch】十九种Elasticsearch字符串搜索方式终极介绍 各种 查询

    本文为博主九师兄(QQ:541711153 欢迎来探讨技术)原创文章,未经允许博主不允许转载. 可以加我问问题,免费解答,有问题可以先私聊我,本人每天都在线,会帮助需要的人. 但是本博主因为某些原因, ...

  5. Go字符串拼接方式深入比较

    前言 Go中字符串的拼接主要有"+".fmt.Sprintf+%s.strings.Join等方式,已经有很多人从耗时的角度比较这些方式的性能,本文则从源码的角度去分析下这些方式的 ...

  6. golang字符串拼接方式

    字符串拼接是字符的常见操作.在golang中,遇见了字符串拼接.作为一个长期的C程序员,我第一反应是:字符串拼接函数strcat,但发现golang并无字符串拼接函数. 我想起了最简单的方法,通过+操 ...

  7. java按空格分字符串,两种用空格分隔的java字符串的方式

    两种用空格分隔的java字符串的方式 两种方式: 1. String str = "123 456 789 111"; String [] strArray = str.split ...

  8. C语言文件——字符串的方式读出与写入

    C语言文件--字符串的方式读出与写入 conclusion: the steps of wirte into file process 1.定义文件路径和文件操作 2.定义文件指针以及存储变量 3.打 ...

  9. ACMNO.26 C语言-字符统计2 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

    题目描述 编写一函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其它字符的个数, 在主函数中输入字符串以及输出上述结果. 只要结果,别输出什么提示信息. 输入 一行字符串 输出 统计数据, ...

最新文章

  1. 史上最全异常检测算法概述
  2. Redis的各项功能解决了哪些问题?
  3. pdfparser java_如何使用java从PDF中提取内容?
  4. ORA-16038: log 3 sequence# 103 cannot be archived
  5. Ubuntu学习——第一篇
  6. Language-Directed Hardware Design for Network Performance Monitoring——Marple
  7. c++ set 遍历_47. Set 是如何工作的(3) 遍历顺序是如何确定的?
  8. float32精度_PyTorch 1.6来了:新增自动混合精度训练、Windows版开发维护权移交微软...
  9. seaborn画图设置横纵坐标标签
  10. 华为Mate 40系列或首发屏下摄像头:全球首个量产级别方案
  11. 基于 Redis3.2.4 集群搭建说明
  12. FreeRTOS(五)——heap文件解析
  13. c语言数组与指针编程源码,C语言编程(练习9:数组与指针)
  14. YUI-compressor 在Linux下安装和使用
  15. python一二维数据的格式化和处理_python第七周,二维数据的格式化和处理
  16. 南京市建筑物矢量数据(Shp格式+带高度)
  17. Microsoft visual Studio 2010 下 DirectX SDK 安装配置详细过程
  18. 小米盒子升级android tv后不能安装第三方软件下载,小米电视,小米盒子无法安装第三方应用,怎么办?...
  19. 电气领域相关数据集(目标检测,分类图像数据及负荷预测),输电线路图像数据
  20. MySQL子查询的优缺点_为什么MySQL不推荐使用子查询和join

热门文章

  1. 深度学习03——CNN
  2. Depth-first Search深度优先搜索专题2
  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第28篇]什么是公钥密码学的IND-CCA安全定义?
  4. [Leedcode][JAVA][第983题][最低票价][动态规划]
  5. 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
  6. mysql gui 分区_一文彻底搞懂MySQL分区
  7. UE4异步编程专题 - 线程池FQueuedThreadPool
  8. Asterisk标准通道变量
  9. PCI总线体系结构概述
  10. 怎么修改file文件框的无文件提示_使用LativeLink时,DO文件编制步骤