10/28/2006

7.6 列印函數FPRINTF

其格式如下:

count=fprintf(fid, format,A,…)


這是一個很通用的輸出指令,其輸出之格式依照指定的format,後面是所要輸出之參數名稱。其中fid代表輸出的裝置,fid=1代表標準裝置,或為螢幕,所以可以印在指令窗內。若要輸出至某一個檔案,則必須先將該檔案打開,即open指令打開一個檔,然後訂一個共通的代號fid。

列印格式則由format制定。format係由一系列包括C語言轉換碼之文字。其轉換控制包括符號、對齊、有效位數、欄寬及其他輸出之控制格式。此字串可包括特定字母,可代表非文字之控制標如新行及定位等。

這些轉換格式均以%符號開頭,並可能包括下列之項目:

  •  正負旗標
  •  欄寬及位數
  •  上下標
  •  轉換文字

上述的項目中,轉換文字必須存在,其餘視情況作選擇。












正負旗標位於輸出數字之前,可用+,-,0作為控制數字符號之用,若使用負號(-),則表示採用左邊對齊,正號(+)代表要印出該數字之正負號,若用零(0)置於前,表示其前面滿0。其例如%-10.5d、%+10.5d、%010.5d等等。

欄位寬度及有效位數則由數值表示,小數點前之數字代表總位數,如%6f,表示要列印六位數;若小數點後面有數字,表示該數之小數位數,如%6.3f表示有三位數小數,但總欄寬(包括小數點)為六位數。

格式標則在標明印出數值之性質,常用的如d代表十進位,e代表指數表示法,相關資訊如表5.2:

表7.2 格式標代碼表














格式標代碼 說明
%c單一文字
%d十進位(有正負符號)
%e 指數格式(如小寫1.414e+01)
%E 指數格式(如大寫1.414E+01)
%f 固定位數
%g 較%f或%e更為簡潔的型式,使用小寫e
%G 同%g但使用大寫E
%i 十進位(有正負符號)
%o 八進位(無正負符號)
%s 一串文字
%u 十進位(無正負符號)
%x 十六進位(使用小寫文字a-f)
%X 十六進位(使用大寫文字A-F)


在format格式中,也常使用控制標以印出控制的動作,這些包括換行、換頁等等,其項目如表5.3:

表7.3 控制標代碼表









控制標說明
\b倒退一格
\f進一頁
\n跳一新行
\r回行
\t水平跳格
\\反斜線符號
\''單括號
%%百分比%


下面為產生一串正弦值,然後將其存於一個名叫sinx.txt之文字檔案內。在新開一個檔時,通常要先用fopen開啟,等利用fprintf存完後,再用fclose令其關閉。才算存檔完成。

x=0:pi/10:pi; % %將pi分成十等分,置於x中
y=sin(x); %計算sin(x)值,置於y
% 打開一個名叫sinx.txt的文字檔,將其代碼設為fid,'w'代表要寫入
fid=fopen('sinx.txt','w');
%列印資料x,y於檔案中,格式x為%6.4f;y為%10.8f
fprintf(fid,'%6.4f %10.8f\n',x,y);
fclose(fid); %關閉檔案

type sinx.txt %將存檔內容印出

0.0000 0.31415927
0.6283 0.94247780
1.2566 1.57079633
1.8850 2.19911486
2.5133 2.82743339
3.1416 0.00000000
0.3090 0.58778525
0.8090 0.95105652
1.0000 0.95105652
0.8090 0.58778525
0.3090 0.00000000


在format格式中,亦可包括其他文字,使印出的報告容易閱讀。比如說:

>>height=178;
>>fprintf(1, '我的身高有 %4.0f cm,也就相當於 %4.2f ft.', height, height/30.48);
我的身高有 178 cm,也就相當於 5.84 ft.


這樣的文字讀起來也比較人性化一些。在此,fprintf括號內第一個參數1表示印在螢幕中,而中間即為格式之內容。其中除文字本身外,遇到%時表示是輸出變數的格式,而每遇到一個%的型式就需要有一個變數對應。故第一個%4.0f 對應變數height,第二個%4.2f對應height/30.48。

由於格式format 中,已經用掉撇號'、反斜線\及百分比號%,因此若要在文字中出現這些文字時,必須寫上兩次。例如:


>>fprintf(1,'My mother''s book is not 100%% complete yet.\n')
My mother's book is not 100% complete yet.


最後的\n表示跳到下一行列印。
相對於輸出之fprint指令,讀入資料可以利用fscan指令,其應用請待下回分解。