檔案IO語句小結

2021-10-20 09:14:19 字數 4683 閱讀 8208

假期學習了一些c++語法知識,筆記發出來給自己做個總結。

本例假定輸入來自infile.dat檔案,輸出傳送到outfile.dat檔案

#include // 用於檔案i/o

#include // 用於cout

#include // 用於exit

using namespace std;

ifstream instream;

ofstream outstream;

instream.open("infile.dat");

if (instream.fail())

outstream.open("outfile.dat");

if (outstream.fail())

instream >> somevariable >> someothervariable;
outstream << "somevariable =" << somevariable << endl;
instream.close();

outstream.close();

// examle

ofstream outstream;

對程式輸出的布局進行調整稱為對輸出進行格式化,可為任何輸出流使用這些格式化命令。

outstream.setf(ios::fixed);

outstream.setf(ios::showpoint);

outstream.precision(2);

​ 每個輸出流都有名為precision的成員函式。程式一旦為outstream流執行了上述precision呼叫,從此以後,向那個流輸出帶小數點的任何數字時,要麼總共保留兩個有效數字,要麼在小數點之後保留兩位——具體由你使用的編譯器決定。

precision函式呼叫只對呼叫中指定的流生效。如果還有乙個名為outstreamtwo的輸出流,outstream.precision呼叫只影響outstream流的輸出。當然也可為outstreamtwo呼叫precision,並指定不同小數字數。

setf 是 set flag 的縮寫,標誌(flag)是以二選一方式做一件事情的指令。標誌作為setf的實參,該標誌就會指示計算機以特定方式將輸出寫入那個流。

標誌含義

預設ios::fixed採用定點計數法( fixed-point notation ),如果設定這個標誌,就不用e計數法寫浮點數(設定該標誌會自動取消設定 ios::scientific 標誌)

未設定ios::scientific如果設定這個標誌,會用e計數法寫浮點數(設定該標誌會自動取消設定 ios::fixed 標誌)

如果未設定 ios::fixed,也未設定 ios::scientific,就由系統決定如何輸出每個數字。

未設定ios::showpoint如果設定這個編制,就始終為浮點數顯示小數點和尾隨的0.如果沒有設定這個標誌,而且乙個數字在小數點後全是0,那麼當這個數字輸出時,就可能不會顯示小數點和尾隨的0。

未設定ios::showpos如果設定這個標誌,正整數之前會輸出乙個正號

未設定ios::right如果設定這個標誌,同時呼叫width指定了域寬,輸出的下一項會對其指定域的右側(右對齊)。也就是說,在輸出的項之前,會根據需要新增填充空格(設定該標誌會自動取消設定 ios::left 標誌)

已設定ios::left如果設定這個標誌,同時呼叫width指定了域寬,輸出的下一項會對其指定域的左側(左對齊)。也就是說,在輸出的項之前,會根據需要新增填充空格(設定該標誌會自動取消設定 ios::right 標誌)

未設定​setf 的格式化標誌

cout << "start now";

cout.width(4);

cout << 7 << endl;

// output:

// start now 7

width 函式告訴流乙個輸出項要佔多少個字元位置(即域寬)。

本例中,輸出項(也就是數字7)只佔乙個字元位置,而width要求使用4個字元位置,所以其他3個位置用空格填充。如輸出所需的字元位置數目超過了在width函式呼叫中指定的數目,就自動補足缺少的字元位置。總之,輸出項始終都會完整輸出,不會被截短,無論為width指定的引數是什麼。

​ **操縱元(manipulator)**是以非傳統方式呼叫的函式。呼叫操縱元後,它本身又會呼叫乙個成員函式,操縱元位於插入操作符 << 之後。和傳統函式一樣,操縱元可以有,也可以沒有引數。

要使用setwsetprecision操縱元,必須在程式中包含以下預編譯指令 :

#include using namespace std;
​ 操縱元setw ≈ width,setprecision ≈ precision。使用setprecision操縱元設定小數字置時,和成員函式precision的情況一樣,設定會一直生效,直到把它重設為其他數字(通過再次呼叫setprecision或precision)。

程式示例:

cout << "start" << setw(4) << 10

<< setw(4) << 20 << setw(6) << 30;

cout.setf(ios::fixed);

cout.setf(ios::showpoint);

cout << "$" << setprecision(2) << 10.3 << endl

<< "$" << 20.5 << endl;

// output:

// start 10 20 30

// $10.30

// $20.50

所有資料都作為字元資料輸入輸出。get函式允許讀取輸入的乙個字元,並把它儲存到char型別變數。每個輸入流都提供了get成員函式,無論是輸入檔案流,還是cin流。

以前曾為cin使用提取操作符》,目的是讀取字元輸入(或其他任何輸入)。以前使用提取操作符》時,有的工作是自動完成的,比如忽略空白。而無論下個輸入字元是空白字元(空格、製表符等)還是換行符,get都會讀取它。get函式獲取char型別的變數作為引數,呼叫get時,會讀取下乙個輸入字元,並把實參變數(char_variable)設為該字元:

語法inputstream.get(char_variable);

示例charnextsymbol;

cin.get(nextsymbol);

​ 要用get從檔案讀取輸入,就用輸入檔案流代替cin流。例如,假定instream是檔案輸入流,以下語句從書入圍獎讀取乙個字元並把它放到char變數nextsymbol中:

instream.get(nextsymbol);

為輸入檔案流(比如instream)使用get前,程式必須先呼叫open函式將流連接到輸入檔案中。

​ 每個輸出流都有名為put的成員函式,它獲取乙個char型別的引數。呼叫成員函式put後,它的引數(char_expression)的值被輸出到輸出流。

語法outputstream.put(char_expression);

示例cout.put(nextsymbol);

cout.put(『a』);

​ 要用put向檔案輸出,就用輸出檔案流代替cout流。例如,假定outstream是檔案輸出流,則以下**將字元』z』輸出到與outstream流連線的檔案:

outstream.put(『z』);

​ 為輸出檔案流(比如outstream)使用成員函式put之前,程式必須先呼叫open函式將流連接到輸出檔案。

putback是每個輸入流都有的成員函式,它獲取乙個char引數,並將該引數的值放回輸入流。該引數可以是能求值為char值的任何表示式。

fin.get(next);

while (next != ' ')

fin.putback(next);

以上**從與輸入流fin連線的檔案讀取字元,將它們寫入與輸出流fout連線的另乙個檔案。**一直讀取字元,直到(但不包括)第乙個空格。

注意,執行完這段**之後,已被讀取的空格仍然包含在輸入流fin中,因為**在讀取了這個空格之後,又把它放回原來的輸入流中。還要注意,putback是將乙個字元放回輸入流中,而put是將乙個字元放到輸出流中。被成員函式putback放回輸入流的字元不一定是上次讀取的字元,它可以是任意字元。putback是將字元放回輸入流而不是放回輸入檔案,原始輸入檔案的內容不發生任何變化。

Systemverilog 檔案I O小結

一 檔案開啟和關閉 fopen和fclose操作 不同的type含義 二 檔案內容掃瞄 從檔案中讀取內容 fgetc每次讀取乙個字元 8bits fgets每次讀取一行裡的部分或者全部內容,用作字串輸出,每次讀的內容的bit數目或多少取決於str的大小 有多少bit fscanf從讀檔案中讀取內容,...

IO流學習小結

一 概念 io流是對資料傳輸抽象的總稱,根據資料的特性分為幾種類,方便對資料進行針對性的操作。二 分類 1 根據資料型別 即資料傳輸單位 的區別分為 字元流和位元組流 字元流和位元組流 只要是處理純文字資料,就優先考慮使用字元流 除此之外都使用位元組流 能處理大部分型別的資料 2 根據資料流向的區別...

迴圈語句小結

迴圈語句小結 迴圈語句已經結束,在做完相應的oj之後,感慨良多。接下來我就學習迴圈結構的知識總結和感悟完成以下部落格。知識總結 迴圈語句如果只是單純的使用的話,難度並不算大,可我認為將之前和之後學到的各種語句與迴圈結構結合出題應該是乙個趨勢,也正是這部分的難度所在。l 目前接觸較多的是三個迴圈語句 ...