日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

發布時間:2023/12/10 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c/c++,字符,字符串,各种方式读入与对空格,回车的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#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++,字符,字符串,各种方式读入与对空格,回车的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。