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()被定義了多處:
-
<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)為換行符 -
<string>中定義為名空間std下的全局函數(shù) getline(istream&, string&)
#include <string>
using namespace std;string s; getline(cin, s);
C++中的getline是忽略換行符的;如果是由GCC編譯C類實(shí)現(xiàn),注意可能會(huì)讀入換行符。
先更到這里