使用標準程式庫函數,就可以從螢幕或是鍵盤進行輸入、輸出。如果要更進一步將資料長久保存下來,或是需要載入大量資料時,使用檔案來管理資料是不可或缺的一環哦!
在程式中要操作檔案,需要依照以下的順序來進行:
(1)開啟檔案 → (2)讀取/寫入檔案 → (3)關閉檔案
所謂檔案的「開啟」、「關閉」,就是在操作開始之前用於輸入、輸出的資料流概念,以及檔案連結與檔案分開等處理。開始使用檔案的時候需要將檔案開啟,最後則需要將檔案關閉。
範例:
#include <stdio.h>
int main(void)
{
FILE *fp;
int a, sum=0;
fp=fopen("test1.txt", "r"); //將檔案開啟
if(fp==NULL)
{
printf("無法開啟檔案。\n");
return 1;
}
while(fscanf(fp, "%d", &a)!=EOF)
{
sum+=a;
}
fclose(fp); //將檔案關閉
fp=fopen("test1.txt", "a"); //將檔案開啟
fprintf(fp, "%d\n", sum);
fclose(fp); //將檔案關閉
return 0;
}
為了配合這個範例,你可以在本程式所在的資料夾下建立一個檔案,名為"test1.txt",內容如下:
1
2
3
4
5
6
7
8
9
10
記得在最後面空一行。
注意:
檔案的開啟用
fopen()函數來進行。這個函數會傳遞以下兩項引數:檔案名稱、開啟模式(如下表)。傳回值是該檔案的指標(FILE*型態),這個指標稱之為
檔案指標或者是
資料流指標。
此外,基於某種理由而無法開啟檔案時,fopen()函數就會傳回「NULL」這個由巨集所定義的指標。
開啟模式:
"w":用於寫入純文字檔案(檔案內的內容被完全覆蓋)
"r":用於讀取純文字檔案
"a":用於追加寫入純文字檔案(從檔案的末尾開始寫入)
"w+"、"r+"、"a+":與以上相同,但是同時具有寫入跟讀取的權限。
"wb"、"rb"、"ab":與首三者相同,但是是以二進位方式進行。
在程式的最後,使用
fclose()函數進行將檔案關閉的處理。如果沒有關閉檔案的話,檔案有時候會因此發生問題,請別忘記這個動作哦!
寫入檔案的函數與輸出用的printf()很相像,是
fprintf(),用法與printf()幾乎一樣,只是多了一個引數指定檔案指標。
讀取檔案也是哦,用的是與scanf()相似的
fscanf(),一樣多了一個引數用來指定檔案指標。
補充--printf()、scanf()的轉換規格
printf()以及scanf()是兩個我們非常常用的函數,基本的用法大家都已經大致了解,不外乎是:一個一個對應、長整數用%d、浮點數用%f……等等。
像是%d、%f、%s等等,這些要求它以特定的格式輸出輸入的東西,就叫做
轉換規格。
printf()轉換規格:
%c 以字元輸出
%d 以10進位輸出
%f 以浮點小數輸出
%e 以科學記號表示,指數部份加上e之後輸出
%E 以科學記號表示,指數部份加上E之後輸出
%s 以字串輸出
%p 以指標輸出
%o 以8進位輸出
%x 以16進位小寫輸出
%X 以16進位大寫輸出
%u 以不帶記號的10進位輸出
scanf()轉換規格:
%c 以字元輸入
%d 以10進位輸入
%f 以浮點小數float輸入
%lf 以浮點小數double輸入
%s 以字串輸入
%p 以指標輸入
%o 以8進位輸入
%x 以16進位輸入
%u 以不帶記號的10進位輸入
這是用於對齊的,常常輸出時想要在螢幕上或是檔案中排列得整齊,就要指定輸出的寬度。
舉例:%5d或%+5d 以5個字元的寬度來輸出,並靠右對齊
%-5d 以5個字元的寬度來輸出,並靠左對齊
輸出時也可以指定所輸出的小數點要幾位數,也就是所謂的精度。
舉例:%.3f 輸出至小數點以下3位
以上兩種也可以組合起來哦!例如:%-6.2f,就是將浮點小數向左對齊、總字原寬度為6個字元、輸出至小數點以下2位數。圓周率的話就變成「3.14(空格)(空格)」。