C/C++輸入輸出格式控制——實(shí)用篇

1 C++輸出

先介紹一個(gè)不太好用的,基于cout的格式控制:

常見的是保留幾位小數(shù)的問題
e.g. 保留7位小數(shù)
#include <iostream>
#include <iomanip>

  double score = 12.34567899;
  cout << setprecision(7) << score << endl;
  cout << setiosflags(ios::fixed) << setprecision(7) << score << endl;

輸出結(jié)果為
12.34568
12.3456790

可見setprecision之前如果不做fixed小數(shù)點(diǎn)的操作,將會(huì)指定有效數(shù)字為7,而不是小數(shù)點(diǎn)后7位有效。
另外要注意,setiosflags(ios::fixed)設(shè)置一次就夠了,之后cout都被固定了小數(shù)點(diǎn)(如果要輸出double或者float的話);想要取消這個(gè)設(shè)置可以cout << unsetiosflags(ios::xxx),括號(hào)內(nèi)還必須指定一種格式,而我們可能想直接unset(捂臉哭),所以說cout的格式控制沒什么好用的,放眼望去一片污染。。

想繼續(xù)使用cout的同學(xué)可以參照這張表,因?yàn)樯鲜鲇梅ㄟ€可以作為cout的成員函數(shù)使用:cout.setf(ios::fixed); <=> cout << setiosflags(ios::fixed);
這里注明盜圖自:http://c.biancheng.net/cpp/biancheng/view/2227.html


2 C輸出

C++與C混編的強(qiáng)大體現(xiàn)之一就是在C++中使用C的輸入輸出來控制格式。簡(jiǎn)單粗暴,行之有效。
#include <stdio.h>

double score = 12.34567899;
printf("%.2f", score);

這樣輸出的結(jié)果是12.35(格式是%m.nf,m是總共多少位,n是小數(shù)點(diǎn)后多少位)
太強(qiáng)大了其他不想說了OTL。。若有需求日后再更。


3 C/C++輸入

這個(gè)模塊,我們?cè)敿?xì)討論一下C風(fēng)格的輸入(教授臉)

3.1 scanf 格式輸入函數(shù)

e.g.我現(xiàn)在要從鍵盤輸入時(shí)間,格式為09:28:00(9點(diǎn)28分)
我還要算出這些時(shí)間點(diǎn)的間隔,腦子里立即想到char[]和字符串解析(記一次機(jī)考掛)。Stupid!
#include <stdio.h>

  int h, m, s;
  scant("%d:%d:%d", &h, &m, &s);
  int time = h*3600 + m*60 + s;

再對(duì)time作差就可以啦~

3.2 get系列

3.2.1 getch()
  #include <conio.h>      //Windows環(huán)境
  #include <curse.h>      //Linux環(huán)境

捕獲鍵盤輸入并且不回顯,不放過每一個(gè)字符。

3.2.2 getchar()

捕獲鍵盤輸入并且回顯。

以上兩個(gè)可以用于調(diào)試程序,暫停窗口。比如程序的最后,加一行g(shù)etchar(),窗口就會(huì)保留,這時(shí)可以看看屏幕上輸出的調(diào)試信息,直到用戶敲回車才關(guān)閉。其它還有g(shù)etc(), gets(), getche()等等,我自己用不到所以……參見別人家的博客叭
??http://blog.sina.com.cn/s/blog_590be5290100kaeg.html

3.2.3 getline()

這是C++函數(shù)!但由于都有g(shù)et,就一起記憶了。
第一個(gè)參數(shù)傳遞的是輸入流:istream(輸入流的基類), ifstream, istrstream 的引用;
第二個(gè)參數(shù)傳遞的是本地字符串引用,即從輸入流讀出來的東西要存放的位置。

C++中的getline()被定義了多處:

  1. <iostream>中作為cin的成員函數(shù),定義了3個(gè)構(gòu)造函數(shù)
    #include <iostream>
    using namespace std;

     cin.getline(char *);
     cin.getline(char *, int size);
     cin.getline(char *, int size, char delim);        //delim是分隔符,默認(rèn)為換行符
    
  2. <string>中定義為名空間std下的全局函數(shù) getline(istream&, string&)
    #include <string>
    using namespace std;

     string s;
     getline(cin, s);
    

C++中的getline是忽略換行符的;如果是由GCC編譯C類實(shí)現(xiàn),注意可能會(huì)讀入換行符。

先更到這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C/C++輸入輸出流總結(jié) 前兩天寫C++實(shí)習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生,打了好長(zhǎng)時(shí)間的文件都沒有打開,今天終...
    LuckTime閱讀 1,807評(píng)論 0 6
  • 淺談C++常用輸入輸出 在編寫C++程序的時(shí)候,經(jīng)常因?yàn)檩斎胼敵鲱^疼,所以在這里做一個(gè)小結(jié),記錄一下常用的輸入輸出...
    MinoyJet閱讀 3,843評(píng)論 0 6
  • 第一章 計(jì)算機(jī)與C++編程簡(jiǎn)介 C++程序6個(gè)階段編程 ->預(yù)處理->編譯->連接->裝入->執(zhí)行1.程序在編譯器...
    rogertan30閱讀 4,507評(píng)論 0 1
  • c++的輸入輸出不是建立在語言上的,而是由iostream和fstream文件中定義的一組模板類實(shí)現(xiàn)的,且這個(gè)類庫(kù)...
    Tianql閱讀 3,446評(píng)論 0 1
  • 題目類型 a.C++與C差異(1-18) 1.C和C++中struct有什么區(qū)別? C沒有Protection行為...
    阿面a閱讀 7,891評(píng)論 0 10

友情鏈接更多精彩內(nèi)容