getline()的使用注意


  在使用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:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM