Tags:C++,《C++ Primer Plus》筆記
一、iostream##
頭文件 <iostream> 用于對(duì)控制臺(tái)進(jìn)行輸入輸出。通常來講,對(duì) iostream 的疑惑一般在于 cin 上,這里總結(jié) cin 的用法。
cin >> name###
一般地,我們通過 cin >> <name> 來將一段輸入流復(fù)制到名為 name 的變量中,當(dāng)然 name 變量必須已經(jīng)提前聲明。
首先, cin 輸入的數(shù)據(jù)一開始都是字符類型,也就是 char 。但是, cin 的后續(xù)行為將視 name 的類型而定。
- 如果是
char類型,則cin讀取遇到的第一個(gè)字符,輸入到name中。
cin只管往后讀取,因?yàn)檩斎肓髂J(rèn)就是字符流,所以讀取到一個(gè)字符就會(huì)結(jié)束。例如輸入3.22,前面的空格會(huì)被自動(dòng)跳過,讀到3時(shí)取到一個(gè)字符,讀取結(jié)束,.22會(huì)被留在輸入流中,參與下一次讀取。
- 如果是
int類型,則cin讀取從第一個(gè)數(shù)字字符開始,到第一個(gè)非數(shù)字字符的中間部分,輸入到name中。
同char一樣,第一個(gè)數(shù)字字符前面的內(nèi)容跳過。例如輸入13.22,讀取得到13。
- 如果是
double類型,則在int規(guī)則的基礎(chǔ)上,不跳過.即可。
- 如果是
char[]類型,則會(huì)將輸入流一直讀入,直到遇見空白字符(空格符、換行符等)。
</br>
cin.get(name)###
讀取下一個(gè)字符到name中,注意三點(diǎn):
-
name必須是char類型變量,沒有例外。 - 不會(huì)跳過空字符。
- 不指定
name時(shí),即cin.get()時(shí),跳過輸出流中的下一個(gè)字符。
</br>
cin.get(name,Artsize),cin.getline(name,Artsize)###
兩者都可以讀取在同一行、長度為 Artsize 的一連串字符或整行字符,區(qū)別在于:
前者會(huì)在輸出流里留下一個(gè)換行符,而后者則連換行符一起讀取。
</br>
對(duì)于上述的幾種 cin 用法,都只有在用戶按了回車鍵后,輸入流才會(huì)被讀取。在很多編譯器里,這個(gè)回車也算一個(gè)換行符!。
</br>
cin文件尾條件###
逐個(gè)字符讀取時(shí),通常我們需要判斷輸入流是否已到結(jié)尾。
若 cin.get() 在讀取下一個(gè)字符時(shí)發(fā)現(xiàn)沒有輸入,則會(huì)返回 EOF ,并將 cin.eofbit 和 cin.failbit 設(shè)置為1,此時(shí) cin 將關(guān)閉讀取的功能,直至人為調(diào)用 cin.clear() 為止。
而我們可以通過 cin.eof() 或者 cin.fail() 訪問 cin.eofbit 或 cin.failbit ,若已被標(biāo)記,則函數(shù)返回 true 。
下述代碼將計(jì)算輸入的字符數(shù)。
int ch;
while ((ch = cin.get()) != EOF){
cout.put(char(ch));
++count;
}
</br>
cin檢錯(cuò)經(jīng)典代碼###
if(!cin){
cin.clear();
while(cin.get() != '\n') continue;
cout << "Bad input;input process terminated.\n";
break;
}
</br>
二、fstream##
頭文件 <fstream> 用于對(duì)文件進(jìn)行輸入輸出,使用步驟如下:
- 包含頭文件
fstream。- 用
ofstream操作符或ifstream創(chuàng)建一個(gè)對(duì)象。- 就像使用
cout和cin那樣使用創(chuàng)建的對(duì)象。- 使用結(jié)束后,調(diào)用對(duì)象的
close()成員函數(shù)。