《C++ Primer Plus》學習筆記11,《cprimerplus》

來源:互聯網
上載者:User

《C++ Primer Plus》學習筆記11,《cprimerplus》
《C++ Primer Plus》學習筆記11

第17章 輸入、輸出和檔案
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
主要內容:
1)C++角度的輸入和輸出
2)iostream類系列
3)重新導向
4)ostream類方法
5)格式化輸出
6)istream類方法
7)流狀態
8)檔案I/O
9)使用ifstream類從檔案輸入
10)使用ofstream類輸出到檔案
11)使用fstream類進行檔案輸入和輸出
12)命令列處理
13)二進位檔案
14)隨機檔案訪問
15)核心格式化
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
1、使用cout進行輸出
1)cout

cout << value;//原型:ostream & operator<< (int)

2)其他ostream的方法:
put()方法 ——用於顯示字元
原型:ostream & put(char);

cout.put('W'); //顯示w字母,cout是調用方法的對象,put()是類成員cout.put('i').put('t'); //拼接輸出//在原型合適的情況下,可以將數值型參數用於put(),讓函數原型自動將參數轉化為蒸汽的char值cout.put(65); //將65轉化為char,顯示cout.put(66.3); //將double值66.3轉化為char值66,並顯示對於字元

3)write()方法 ——用於顯示字串
原型:basic_ostream<char T, traits>& write(const char_type* s, streamsize n);
第一個參數提供了要顯示的字串地址,第二個參數指出要顯示多少個字元
注意:write方法不會在遇到Null 字元時自動停止列印字元,而只是列印指定數目的字元,即使超出了字串的邊界。
4)重新整理輸出緩衝區
控制符flush重新整理緩衝區,而控制符endl重新整理緩衝區,並插入一個分行符號號

cout << 'Hello, good-looking! ' << flush;cout << 'Wait just a moment,please. ' << endl;

控制符也是函數,可以直接用flush()來重新整理cout緩衝區

flush(cout);//或者cout << flush;

5)用cout進行格式化
ostream插入操作符將值轉為為文本格式,在預設的情況下,格式化值的方式如下:
①對於char值,一個字元顯示在寬度為一個字元的欄位中
②對於數值整型,以十進位的方式顯示在一個剛好容納該數字以及負號的欄位裡
③字串被顯示在寬度等於該字串長度的欄位中
④浮點型有點變化
新式:浮點類型被顯示為6位,末尾的0不顯示。
老式:浮點類型被顯示帶6位小數,末尾的0也不顯示
注意顯示的位元和數字被儲存的精度是沒有關係的
⑤修改顯示時使用的計數系統
十進位dec,cout預設十進位
十六進位hex控制符

cout << hex;cout << n;

八進位oct控制符

cout << oct;cout << n;

⑥調整欄位的寬度width

int width();//返回欄位寬度的當前設定int width(int i);//將欄位寬度設定為i個空格,並返回以前的欄位寬度值cout.width(12);//記住是靠右對齊

這裡需要注意:width()方法隻影響接下來顯示的一個項目,之後欄位寬度將恢複為預設值。例如

int w = cout.width(30);cout << w;

注意這個時候顯示字串時候,欄位寬度被設定為30,但是顯示w的值時,欄位寬度不是30,因為它影響的是接下來被現實的項目,所以顯示為0
⑦填充字元

cout.fill('*');

注意這裡與width不一樣,它一直有效。
⑧設定浮點度的顯示精度
C++預設的位元是6,末尾的0將不顯示,precision()成員函數使能夠選擇其它值。

cout.precision(2);//將精度設定為2,新的精度設定也一直有效

注意:老式C++版本將預設模式的精度解釋為小數點後面的位置,新式指的是總位元

cout.precision(2);20.4 -> 202.78889 -> 2.8

⑨列印末尾的0和小數點

cout.setf(ios_base::showpoint); //使得cout顯示末尾的小數點,預設精度為6位置20.04 -> 20.4000cout.precision(2);20.40 -> 20.2.78889 -> 2.8

⑩setf()
控制了小數點被顯示時,其他格式的選項
原型一、

fmtflags setf(fmtflags);cout.setf(fmtflags);//程式中這樣書寫

格式常量fmtflags

ios_base::boolalpha //輸入和輸出bool,可以為true或falseios_base::showbase //對於輸出,使用C++基數首碼(0,0x)ios_base::showpoint //顯示末尾的小數點ios_base::uppercase //對於16進位輸出,使用大寫字母Eios_base::showpos //在正數前面加上+

原型二、

fmtflags set(fmtflags, fmtflags);

第一個參數是一個包含了所需要設定fmtflags值,第二個參數指出要清除第一參數的哪些位
setf(long, long)的參數:
第二個參數
ios_base::basefield
對應第一個參數有三個:ios_base::dec(基數10) ios_base::oct (基數8) ios_base::hex (基數16)
第二個參數
ios_base::floatfield
對應第一個參數有兩個:ios_base::fixed(使用定點計數法)ios_base::scientific(使用科學計數法)
補充:C語言中printf()的說明符號,預設的C++模式對應於%g說明符,定點標記法對應於%f的說明符,而科學計數法對應於%e說明符
區分下,三個計數法的區別
預設模式:新式:浮點類型被顯示為6位,精度指的是總位元,末尾的0不顯示。
定點標記法、科學計數法:精度指的是小數點後面的位元,而不是總位元,顯示末尾0
第二個參數
ios_base::adjustfield
對於第一個參數有三個: ios_base::left(靠左對齊) ios_base::right(靠右對齊)ios_base::internal (符號或基數首碼靠左對齊,值靠右對齊)
補充:
標準控制符

cout << showpoint << fixed << right;

iomanip標頭檔#include<iomanip>
最常用的3個控制符:
setprecision() 設定精度
setfill() 填充字元
setw() 欄位寬度
2、使用cin進行輸入
操作符函數原型

istream & operator>> (int &);cin >> staff_size;

cin
1)輸入一個數字
2)接受一個字串,遇到空格、TAB、斷行符號都結束
cin.get()
1)cin.get(ch)用來接收字元

char ch; cin.get(ch);

2)cin.get(s,n)用來接收一行字串,可以接收空格 這個類似於getline 可以輸入多個單詞用空格隔開

char a[20]; cin.get(a,20);

cin.getline()
接受一個字串,可以接收空格。這個和cin(s,n)都需要注意

char m[20] = jklkjilj;cin.getline(m,5);cout << m << endl; //這裡輸出結果為jklk 因為最後一個字元為‘0’

這就可以知道直接上cin.getline()有三個參數,接收字串到m,接收個數,結束符(當省去的時候我們就預設為'\0'或者‘/n’)

char a[20]; cin.getline(a,5);

getline()
接收一個字串,可以接收空格並輸出,需要包含標頭檔#include<string>
注意,getline()屬於string流,所以只有把字串定義為string型,我們才可以用,否則只能用istream流的cin.getline(m,20)
gets()
接收一個字串,可以接收空格並輸出,但是需要加上標頭檔#include<string>
而且需要注意不能寫成m = gets();應該為gets(m)
getchar()
接收一個字元,需要有標頭檔#include<string>
這幾需要注意,不能寫成getchar(ch);應該寫成ch = getchar(); getchar()是C語言的函數,C++也相容,但是少用。
綜上所述,根據我的習慣,C++以後碰到需要輸入帶空格的字元時用char ch; cin.get(ch)
字串#include<string> gets(str)
補充:流是進出程式的位元組流,緩衝區是記憶體中的臨時儲存地區,是程式與檔案或其他裝置之間的橋樑
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<完結於2014.07.24 23:08



看完《C Primer Plus》後可以學習C++?

C和C++ 在編程邏輯上是一樣的,只是抒寫的語言不一樣,並且C++的好處就是它物件導向,用起來比較的方便,更類似於java。如果想學C++,建議還是結合一本專門講C++的書看看,“C++入門到精通.pdf”,從文法上開始學吧,多寫多練,才能掌握的更好。
 
在學習《c primer plus》的過程中出現一個段錯誤(超出了我的理解範圍)

scanf("%f",weight);少一個&符號
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.