C++cin,cout以及常見函數總結,cin,cout格式化控制

      網友投稿 1330 2025-03-31

      文章目錄


      一. cin對象以及常用函數總結

      1.cin>>

      2.cin.getline()

      3.cin.get():

      4.cin.gcount():

      5.cin.read():

      6.cin.peek():

      二. cout對象以及常用函數總結

      1.cout:

      2.cout.put():

      3.cout.width():

      4.cout.fill():

      三. cout格式化控制

      一. cin對象以及常用函數總結

      1.cin>>

      cin是C++的標準輸入流對象,主要用于從標準輸入讀取數據,無論字符型,浮點型,還是整數形變量,我們只需要cin>>變量名稱;即可完成各類數據讀取數據。說到這里就不得不提到C語言中的標準輸入函數scanf(),對于剛學習C++的萌新,一定會驚艷到相對于scanf函數,cin帶來的便捷,scanf每次想要讀取數據,必須指定數據類型,這顯然顯的有些繁瑣。那么,為什么單靠一個cin>>變量名稱,即可確定數據類型并讀取數據,這其中的奧秘被隱藏在這個>>運算符之中,這個運算符叫做流提取符,其實cin>>的原型是cin.operator >>(),這又是一種被稱為運算符重載的新技術,我們可以查看cin.operator >>的定義,它存在于istream頭文件中,里面為>>符號定義了各種數據的處理方法,給大家看幾個:

      在不為人知的背后,C++替我們處理好了這一切,有一句話說的好:哪有什么歲月靜好 不過是有人負重前行。對吧,我們能輕松敲代碼,是大牛在背后為我們處理了這一切。

      嘿嘿,說重點,cin>>從緩沖區中讀取數據,當我們從鍵盤輸入字符串的時候,需要按回車,程序才會進行下一步動作,這個按下的回車鍵(\r)會被替換為\n,當緩沖區為空時,cin的成員函數會阻塞等待數據的到來,一旦cin的成員函數等到了’

      嘿嘿,說重點,cin>>從緩沖區中讀取數據,當我們從鍵盤輸入字符串的時候,需要按回車,程序才會進行下一步動作,這個按下的回車鍵(\r)會被替換為\n,當緩沖區為空時,cin的成員函數會阻塞等待數據的到來,一旦cin的成員函數等到了’\0’,cin的成員函數就回去讀取數據,如果緩沖區第一個字符是空格,tab鍵,換行符,\0等分割字符,則cin>>自動將其忽略并清除,繼續讀取下一個字符,如果遇到上述分割字符則停止讀取,空白字符留在緩沖區,cin>>不做處理。

      ’,cin的成員函數就回去讀取數據,如果緩沖區第一個字符是空格,tab鍵,換行符,

      嘿嘿,說重點,cin>>從緩沖區中讀取數據,當我們從鍵盤輸入字符串的時候,需要按回車,程序才會進行下一步動作,這個按下的回車鍵(\r)會被替換為\n,當緩沖區為空時,cin的成員函數會阻塞等待數據的到來,一旦cin的成員函數等到了’\0’,cin的成員函數就回去讀取數據,如果緩沖區第一個字符是空格,tab鍵,換行符,\0等分割字符,則cin>>自動將其忽略并清除,繼續讀取下一個字符,如果遇到上述分割字符則停止讀取,空白字符留在緩沖區,cin>>不做處理。

      等分割字符,則cin>>自動將其忽略并清除,繼續讀取下一個字符,如果遇到上述分割字符則停止讀取,空白字符留在緩沖區,cin>>不做處理。

      細心的讀者也許注意到了上述圖片中的>>是具有返回值的,也許也遇到while(std::cin >> value)這樣的語句,有很多人誤以為cin會返回值,其實不然,cin是類對象,對象應該是不具備返回值的,沒錯,這個返回值是由操作符>>返回的。

      int a; while (cin >> a) { cout << "有效 "; }

      1

      2

      3

      4

      運行結果:

      當使用一個istream的對象作為條件時,效果是檢查流的狀態。若流有效,則檢測成功,返回true。當遇到文件結束符(windows為ctrl+Z,unix為ctrl+D)或者無效的輸入(比如用一個字符來作為一個整型數的輸入時),istream的對象狀態會變為無效。

      至于運算符重載的好處,就是可以處理我們自己定義的復合類型,這里不再贅述。

      2.cin.getline()

      用于接收字符串,有兩種形式:前者以換行符結束,后者可以指定結束符結束

      char carray[10]; cin.getline(carray,10);//前者,默認換行符不讀取,并將換行符從緩沖區清除。 cin.getline(carray.10,'b'); //后者,如果遇到字符'b'則終止讀。'b'不讀取,將'b'從緩沖區清除。 //要注意的是10和'b'都可作為getline停止讀取的條件。

      1

      2

      3

      3.cin.get():

      cin.get()有多種重載形式,就常用的來介紹:

      第一種:接收一個字符

      char a; a = cin.get(); // 或者寫成cin.get(a); 都是可以的

      1

      2

      第二種,接收字符串,有兩種形式:一前者以換行符結束,后者可以指定結束符

      char carray[10]={}; cin.get(carray,10);//前者,換行符不讀取,殘留在緩沖區。 cin.get(carray,10,'b')// 后者,如果遇到字符'b'則終止讀。'b'不讀取,殘留在緩沖區。 //這里的10代表接收9個字符+1個'

      char carray[10]={}; cin.get(carray,10);//前者,換行符不讀取,殘留在緩沖區。 cin.get(carray,10,'b')// 后者,如果遇到字符'b'則終止讀。'b'不讀取,殘留在緩沖區。 //這里的10代表接收9個字符+1個'\0'

      '

      1

      2

      3

      4

      5

      4.cin.gcount():

      這是一個用來統計讀入的字符數的函數

      char a[10]; cin.get(a,10,'g'); cout << a; cout << cin.gcount();

      1

      2

      3

      5.cin.read():

      讀取指定大小的字符,不會在后面加’

      讀取指定大小的字符,不會在后面加’\0’

      char a[10]; cin.read(a,10);

      1

      6.cin.peek():

      查看緩沖區下一個字符,但是不讀取

      二. cout對象以及常用函數總結

      1.cout:

      cout是C++的標準輸出流對象,主要用于從標準輸出數據,跟cin是鐵哥們,不再多說,就是要注意cin>>運算符向左開口,而cout運算符是向右開口的:cout<<。

      2.cout.put():

      一個專門輸出字符的函數,不可以輸出整形。

      3.cout.width():

      可以控制輸出字符域寬度,且不足用空格填充,并且默認的方式是右對齊,width只會影響設置后的下一次輸入,當二次輸入時,width()失效,恢復默認方式。

      char a; cin.get(a); cout.width(3); cout << a;

      1

      2

      3

      4.cout.fill():

      C++cin,cout以及常見函數總結,cin,cout格式化控制

      該函數可以用來改變填充的字符,并且設置以后一直生效,這一點和width不同。

      cout.width(8); cout.fill('*'); cout << 123 << endl; //運行結果為:*****123

      1

      2

      3

      三. cout格式化控制

      凡事有利就有弊,一邊羨慕cout帶來的快捷,一邊吐槽cout不如printf函數無法設置輸出格式。其實cout也是可以進行格式化輸出的,來看看:

      width()和fill()上文已經說過,這里不再討論,來看看剩下的:

      C++默認的流輸出浮點數有效位是6位,包括整數和小數,數值超出6位后將使用四舍五入原則進行控制,使用cout.precision(n)可以控制輸出的有效數位,n=0時默認6位。

      double a = 1234567.12345; cout << a;

      1

      運行結果:

      double a = 1234.123789; cout.precision(7); cout << a;

      1

      2

      運行結果:

      setf(ios::state)設置輸出格式狀態,括號中應給出格式標志,內容與控制符setiosflags括號中的內容相同。

      unsetf(ios::state) 終止已設置的輸出格式狀態,在括號中應指定內容。

      例如:

      int a = 1234567; cout.setf(ios::showpos);//對正數顯示正號 cout << a << endl; //cout.unsetf(ios::showpos);//取消設置 cout.width(10); //設置域寬為10 cout.setf(ios::internal); //數值的符號位在域寬內左對齊,數值右對齊,中間由填充字符填充 cout << a << endl;

      1

      2

      3

      4

      5

      6

      運行結果:

      每次使用格式控制符,必須寫一個cout,這樣的設置對用戶不太友好,C++又提供上述函數的替代品:

      同時需要添加頭文件

      cout << setiosflags(ios::showpos)<< a << endl; cout << setw(10) << setiosflags(ios::internal) << a << endl;

      1

      運行結果:

      ok,就到這里!

      C++ iOS

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:在線電子表格
      下一篇:如何轉換wps表數據位置(wps表格轉換區域在哪)
      相關文章
      亚洲一区欧洲一区| 亚洲成人免费电影| 亚洲中文无码卡通动漫野外| 久久99亚洲网美利坚合众国 | 亚洲国产精品白丝在线观看| 亚洲天堂男人天堂| 中文字幕亚洲免费无线观看日本| 亚洲毛片在线观看| 久久久久亚洲AV无码网站| 亚洲人成亚洲精品| 久久精品亚洲中文字幕无码麻豆 | 亚洲欧美中文日韩视频| 亚洲精品无码久久久久A片苍井空 亚洲精品无码久久久久YW | 亚洲AV无码日韩AV无码导航| 亚洲产国偷V产偷V自拍色戒 | 亚洲色成人WWW永久网站| 亚洲综合网站色欲色欲| 亚洲日韩乱码中文无码蜜桃臀网站| 亚洲永久无码3D动漫一区| 国产成人亚洲精品狼色在线 | 亚洲熟女综合色一区二区三区| 亚洲偷自拍另类图片二区| 国产精品亚洲专区无码牛牛| 亚洲av无码国产精品色在线看不卡| 亚洲国产中文字幕在线观看| 国产亚洲欧洲Aⅴ综合一区| 亚洲精品白浆高清久久久久久| 亚洲AV无码乱码在线观看裸奔| 亚洲一区二区三区日本久久九| 亚洲精品乱码久久久久久下载| 亚洲伦理中文字幕| 亚洲AV无码AV男人的天堂不卡 | 亚洲AV无码成人精品区在线观看 | 日韩精品电影一区亚洲| 国产精品亚洲mnbav网站 | 亚洲国产精华液2020| 亚洲精品视频在线看| 国产亚洲3p无码一区二区| 色婷婷亚洲十月十月色天| 亚洲人精品亚洲人成在线| 国产精品亚洲专区一区|