C++I/O小結(jié)

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.eofbitcin.failbit 設(shè)置為1,此時(shí) cin 將關(guān)閉讀取的功能,直至人為調(diào)用 cin.clear() 為止。

而我們可以通過 cin.eof() 或者 cin.fail() 訪問 cin.eofbitcin.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)行輸入輸出,使用步驟如下:

  1. 包含頭文件 fstream
  2. ofstream 操作符或 ifstream 創(chuàng)建一個(gè)對(duì)象。
  3. 就像使用 coutcin 那樣使用創(chuàng)建的對(duì)象。
  4. 使用結(jié)束后,調(diào)用對(duì)象的 close() 成員函數(shù)。
最后編輯于
?著作權(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++程序的時(shí)候,經(jīng)常因?yàn)檩斎胼敵鲱^疼,所以在這里做一個(gè)小結(jié),記錄一下常用的輸入輸出...
    MinoyJet閱讀 3,842評(píng)論 0 6
  • C/C++輸入輸出流總結(jié) 前兩天寫C++實(shí)習(xí)作業(yè),突然發(fā)現(xiàn)I/O是那么的陌生,打了好長時(shí)間的文件都沒有打開,今天終...
    LuckTime閱讀 1,807評(píng)論 0 6
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,663評(píng)論 1 51
  • 《六項(xiàng)精進(jìn)》打卡第三十天 日期:2017.10.24 姓名:黃曉明 單位:溫州市博奕成套設(shè)備工程有限公司 組別:...
    黃曉明_f18e閱讀 160評(píng)論 0 0
  • CoreData概述: Core data 是數(shù)據(jù)持久存儲(chǔ)的最佳方式Core Data 基于MVC模式下,為創(chuàng)建分...
    Icanbe閱讀 661評(píng)論 0 1

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