You are on page 1of 18

資料輸入與輸出

• 開檔設定
• 資料儲存 : fprintf()
• 資料輸入 : fscanf()
• 對話框開啟檔案
資料輸出範例程式
- 程式在目錄 Example Program 內
檔案輸入 / 輸出四步驟 :
1. 宣告檔案變數 fp
- fp 為變數 , 名稱可改變
開檔設定
e.g. *fp1, *fp2 等
- fp 前加“ *”: 稱為取址變
數,
意思為取 fp 所在的位址 .
1
2. 指定目錄 , 檔名與讀或寫檔
2
- 將”…”內的資料 ( 包括
folder, file name) 存入 fp
的位址內 . 由於該筆資料
所佔記憶體長度不一,
因此使用” *” 取 fp 的位
址,
系統可自動配置適當記 3
憶體儲存該筆資料。

3. 資料讀取或寫入
- 依所需紀錄資料可重複
使 4
用。

4. 關檔
- 相當重要,若忘記此一指
令,無法成功寫檔。
開檔設定指令格式
檔案資料型態
大小寫均可
• FILE *fp;
• fp=fopen("C:\\temp\\test.txt",“w");
– //w: 儲存資料於檔案中

• FILE *fp1;
• fp1=fopen("C:\\temp\\test.txt","r");
– //r: 由檔案讀資料到程式

• FILE *fp1;
• fp1=fopen("C:\\temp\\test.txt","a");
– //a: 將資料寫入一既存的檔案中 ,
資料增加到檔案末端

• 結束存讀檔需關閉檔案
– fclose(fp);
– fclose(fp1);
存檔範例 :

儲存資料使用 w

輸出資料指令 , 格式依資料型態而改變

提醒程式結束
新增資料附於既有檔案後面範例 :

新增資料使用 a

執行前若該檔案內資料為 : 執行後該檔案內資料為 :
… …
… …
This is the third line
fp 變數可反覆使用
在同一個函式中 , 檔案變數 fp 可反覆使用 ,
其時機為當一個檔案使用結束後 , 關閉該檔 ,
再將 fp 宣告為另一個檔案 , 再繼續讀存資料 .
同一函式中 fp 只需宣告一次 ,
• FILE *fp1;
• fp1=fopen("C:\\temp\\test.txt","r");
• …
• fclose(fp1);
• fp1=fopen("C:\\temp\\test.txt",“w");
• …
• flcose(fp1);
fprintf()
• 使用於資料儲存
• FILE *fp;
• fp=fopen("C:\\temp\\test.txt","w");
• fprintf(fp,”This is the first example”);
• fprintf(fp,”%S\n”,_T(”This is the first example”));

兩種程式碼撰寫方式
- 第一種,將字串直接寫入” “內 .
- 第二種,以 Format 格式呈現 ( 後面說明 )
將以下兩行置於程式最後面,程式執行完後可自動開啟產生
的檔案
• CString file=_T("D:\\temp\\test1.txt");

ShellExecute(NULL,_T("open"),file,NULL,NU
LL,SW_SHOW);

其中,紅色部分隨檔案名稱與位置不同而變更
控制字元 \n, %d %f %S %lf
資料輸出或輸入格式之控制
- \n: 強制換行 , 檔案內游標強制跳至下一行
- %d: 變數資料型態為整數
- %f: 變數資料型態為單精度實數
- %lf: 變數資料型態為雙精度實數
- %S: 變數資料型態為字串

• 字串
– CString str;
– str=_T(”This is the first example”);
– fprintf(fp,”%S\n”,str);
• 整數
– int j;
– j=3;
– fprintf(fp,”%d\n”,j);
• 實數
• 範例一
– double pi=3.14159;
– fprintf(fp,”%f\n”,pi);
• 範例二
– double pi, pi2, pi3;
– pi=3.14159;
– pi2=2*pi;
– pi3=3*pi;
– fprintf(fp,”%f %f %f\n”,pi,pi2,pi3);
• 實數範例三
– FILE *fp;
– int jj;
– double a, b, c;
– char *str=”C:\\temp\\test.txt“;
– fp=fopen(str,”w”);
– a=3.0;
– b=5.0;
– c=a+b;
– fprintf(fp,”The sum of %lf and %lf is equal to %lf .”,a,b,c);
– fclose(fp);
• 範例四
• fprintf(fp,”%f\n”,k1);
• fprintf(fp,”%f\n”,k2);
• fprintf(fp,”%f”,k1);
• fprintf(fp,”%f”,k2);
控制字元意義
• \n 換列
• %d 整數
• %S 字串
• %f 實數
• %lf 雙精度實數
– %10.3f
– %5.2f
• %e 科學計數
• %c 字元
• %o 8 進位整數
• %x 16 進位整數
• %g 小數點後面 0 自動去除
fscanf()
• 讀取資料
• 範例一
– FILE *fp1;
– int jj;
– char t[80];
– fp1=fopen("C:\\temp\\test.txt","r");
– fscanf(fp1,”%d\n”,&jj);
– fscanf(fp1,”%s\n”,t);
• int var1, var2;
• fscanf(fp1,”%d %d\n”,&var1, &var2);
– &: 取址符號
– 當 var1 宣告後 , 系統自動指定 32 位元之記憶體給 var1
– fscanf 函數的處理方式為 : 利用 & 取得 var1 的記憶體
位址 , 再將由檔案讀到的資料存放到該記憶體內
– var1 所對應的記憶體內容變更後 ,var1 的內容也隨之更
新為新的數據 var1
XXXX XXXX XXXX
fscanf
yyyyyy 12 檔案內容 12
var1
變數宣告
12
字元輸入
• char t[30];
• fscanf(fp,”%s”,t);

t 為一陣列 , 若使用其中元素 ,
用法為 t[0], t[1], t[2], etc.

現只將 t 陣列之記憶體位址傳給
fscanf, 因此使用上述方式 .( 無需加 &)
字元讀檔範例 - 轉為實數與整數
資料檔 :

1.3
2.4
5.6

atof - 強制轉型 , 將字元轉為實數


atoi - 強制轉型 , 將字元轉為整數

結果 :
a=1.3
b=2
c=5.6

You might also like