ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

getline()的使用注意

2020-03-21 20:06:54  阅读:228  来源: 互联网

标签:test1 cin 注意 读入 使用 getline 回车 getchar


  在使用getline读入一整行时,若是前面是使用getchar()、cin这类读入了一个字母,但是不会读入后续换行\n符号或者空格的输入时,再接getline()就容易出现问题。

  这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,接着就被getline(cin,s)给读进去了,此时的s=“\n”,所以实际上s只是读入了一个换行符\n。

  而若是前面使用getline(),再又用getline()进行读入,此时不会发生问题。getline()中读入结束的回车后,结束符不放入缓存区,会将读入的\n直接去除,下一个输入前,缓冲区为空,并不会因为回车留下\n。而cin的结束后,以及getchar()此类的读入结束后,按下回车或者使用空格读入下一个,此时按下的回车或空格会还在缓存区,继续用getline()就会出现前面所提到的情况。

    string s;
    string test1;
    char test2;
    cin>>test1;
//    test2=getchar();
//    getline(cin,test1);
    getline(cin,s);
    cout<<test1<<endl;
    cout<<s; 

  先用cin再用getline():

  使用getchar()再用getline():

   使用getline()再getline()不会出问题:

   那么如何解决前面用了cin、getchar()后的输入呢?可以直接在cin和getchar()后使用一个getchar()吃掉接下来的换行

  比如:

    string s;
    string test1;
    char test2;
    cin>>test1;
    getchar();
    getline(cin,s);
    cout<<test1<<endl;
    cout<<s; 

  这样输入就正常了,getchar()将接下来的空格或回车吃入但不保存,这样继续进行getline()即可。

输入abc空格abc:

 输入abc换行def:

 

 

 

标签:test1,cin,注意,读入,使用,getline,回车,getchar
来源: https://www.cnblogs.com/zzzlight/p/12541729.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有