檔案操作-輸入輸出

不被看好的青春叫成長發表於2015-03-22

想將這個內容掌握已經很久了,一直沒有付諸行動。

每次使用檔案操作時都不記得還要再去看以前有用到檔案操作的部落格,再有就是有時候程式設計結果不對,修改程式碼後又得重新輸入,著實麻煩,今天就將這兩方面的內容一起復習下,同時分享給大家。

平時在oj上做題碰到硬點子過不去時強烈推薦用freopen(),可以節約大量輸入時間,當然比較簡單的就不要用了,去寫檔案和這行程式碼也需要消耗時間。

而C++最近銀行系統、圖書館等的內容出現的比較頻繁啊,也是需要掌握使用檔案操作的。

 

<1>

在C語言中,怎樣直接用txt檔案輸入以及把輸出結果直接輸出到檔案中。寫法很簡單:

     freopen("Input.txt","r",stdin);
     freopen("Output.txt","w",stdout);

是調一個通用的函式freopen,在標頭檔案<stdio.h>中,這個函式有三個引數,第一個表示讀入或者輸出檔案的檔名,第二個有兩個可選引數,“w”表示write,即寫入,“r”表示read,讀入,然後最後一個也是固定的用法,stdin表示讀入,而stdout標輸出,基本用法是固定的,沒有什麼變化,因此只要記住這個固定結構就可以了。

<2>

在C++中;

首先看看怎麼讀入檔案(即將要輸入的內容從檔案中直接讀取)。

讀入檔案的話首先要使用用類ifstream,它在標頭檔案<fstream>中。

(cin是其衍生出的一個變數,所以cin的所有用法同樣也可以用於這個類。)
以前幾篇部落格中《 第3周專案5-陣列作資料成員(4)》為例:

void Salary::set_salarys()
{
    int i=0;
    <span style="color:#ff0000;"><u>ifstream infile("salarys.txt",ios::in);</u>  </span>// 按照讀取的方式開啟檔案"salarys.txt",
    if (!infile)                              //如果開啟失敗
    {
        cerr<<"open error!"<<endl;
        exit(1);                             //輸出開啟失敗並退出
    }
    while (infile>>salarys[i])               //讀入成功則按照順序讀入檔案內容
    {
        i++;
    }
    number=i;
    infile.close();                          //檔案讀入完畢一定要關閉
}

 

首先執行這個程式的時候需要在你存放原始碼檔案的資料夾中建立一個txt格式的文字並命名為salarys,並在其中提前寫入相對應的資料再執行程式。
需要注意的是這裡的輸出開啟失敗的時候用的是cerr而不是cout,同時當使用exit(1)退出時需要標頭檔案<cstdlib>。

cout對應於標準輸出流,預設情況下是顯示器。這是一個被緩衝的輸出,可以被重定向。
cerr對應標準錯誤流,用於顯示錯誤訊息。預設情況下被關聯到標準輸出流,但它不被緩衝,也就說錯誤訊息可以直接傳送到顯示器,而無需等到緩衝區或者新的換行符時,才被顯示。一般情況下不被重定向。

 

再來看看怎麼通過程式在檔案中寫入內容。

它也包含一個類ofstream,同樣在標頭檔案<fstream>中。

(cout是這個類衍生出的一個變數,因此cout的用法都可以用於這個類,只是它是直接用於輸出到檔案中。)

依舊依部落格《第3周專案5-陣列作資料成員(4)》中檔案寫入為例

void Salary::save_salarys( )  
{  
    int i;  
    <strong><u><span style="color:#ff0000;">ofstream outfile("salary_data.txt",ios::out);              </span></u></strong>//以輸入的方式開啟檔案   
    if(!outfile)                                               //測試是否成功開啟   
    {  
        cerr<<"open error!"<<endl;  
        exit(1);                                               //同上
    }  
    for(i=0; i<number; ++i)  
    {  
        outfile<<salarys[i]<<endl;                             //從執行視窗或者程式碼中賦值的內容正在按照順序輸入到檔案中
    }  
    outfile.close();                                           //檔案寫入完畢也一定要關閉
  
}  


執行程式時不需要先建立檔案嗎,在程式執行結束後,它會自動在相應的資料夾中生成檔案salary_data.txt,開啟salary_data.txt就會發現你所輸入的東西已經按照順序在裡面了。

其他方面和讀取時差不多,該加標頭檔案還是得加,兩者必須要注意的時使用檔案後必須要關閉,不然就會出錯。

相關文章