C語言中的文件操作(2)---標準I/O文件操作

  在上一篇文章中,我們初步瞭解了freopen()函數的用法。但在一些算法競賽中不允許使用文件重定向操作,這時我們就只能用標準C頭文件stdio.h中的fopen()函數進行對文件的讀寫了。

  fopen()函數的不足之處就在於使用的方法複雜,寫起來比較麻煩。但是它靈活度比freopen()要高得多,比如支持多文件同時讀寫等等。

  實現方法:在main函數之前定義一個類型爲FILE*的指針,並使它指向創建的文件。

FILE* fp1 = fopen("D:\\abc.in", "r");
FILE* fp2 = fopen("D:\\abc.out", "w");

  同樣地,fopen的第一個參數爲文件的路徑和名稱,第二個參數爲文件操作的模式(在上一篇文章初步介紹過,用法一樣)。當文件打開失敗,則返回值爲NULL。最後別忘記要調用fclose()。

  下面仍然是一個實例,不過要比上一次的難一點,但還是很簡單。

  【輸入】輸入文件爲abc.in:一組整數,它們的數量未知

  【輸出】輸出文件爲abc.out:第一行輸出這組整數的個數,第二行輸出這些整數的和。

  源代碼如下(在VS2008下編譯通過):

int main(void)
{
    FILE* input = fopen("D:\\abc.in", "r");
    if (input == NULL)
    {
        printf("Failed to open the file!\n");
        return -1;
    } //如果打開失敗,則退出程序
    FILE* output = fopen("D:\\abc.out", "w");
    int a, sum = 0, total = 0;
    while(fscanf(input, "%d", &a) != EOF) //在還未讀到EOF時不斷統計數字個數total和總和sum
    {
        sum += a;
        total++;
    };
    fprintf(output, "Sum is %d.\n", sum);
    fprintf(output, "There are %d numbers.\n", total);
    fclose(input);
    fclose(output);
    return 0;
}

   分析這段代碼,我們得到兩個函數:

int fscanf(FILE *stream, const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);

  不難看出,他們分別表示對文件進行讀寫操作。與scanf和printf相似,只是第一個參數是指向指定文件的指針。這一點就沒有freopen()函數那麼簡單。

   好的,以上就是文件I/O的標準函數的常用部分。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章