2014年6月29日 星期日

fscanf, fscanf_s

scanf(), scanf_s()會將輸入的數據根據參數format字符串來轉換並格式化數據。

Scanf() 格式轉換如下
%[*][size][l][h]type

中括號括起來的參數為選擇性參數,而%與type則是必要的。

*代表該對應的參數數據忽略不保存。
size 為允許參數輸入的數據長度。
l 輸入的數據數值以long int 或double型保存。
h 輸入的數據數值以short int 型保存。

type的幾種形式
%d 輸入的數據會被轉成一有符號的十進制數字(int)。
%i 輸入的數據會被轉成一有符號的十進制數字,若輸入數據以「0x」或「0X」開頭代表轉換十六進制數字,若以「0」開頭則轉換八進制數字,其他情況代表十進制。
%0 輸入的數據會被轉換成一無符號的八進制數字。
%u 輸入的數據會被轉換成一無符號的正整數。
%x 輸入的數據為無符號的十六進制數字,轉換後存於unsigned int型變量。
%X 同%x
%f 輸入的數據為有符號的浮點型數,轉換後存於float型變量。
%e 同%f
%E 同%f
%g 同%f
%s 輸入數據為以空格字符為終止的字符串。
%c 輸入數據為單一字符。
[] 讀取數據但只允許括號內的字符。如[a-z]。
[^] 讀取數據但不允許中括號的^符號後的字符出現,如[^0-9].

返回值
成功則返回參數數目,失敗則返回-1,錯誤原因存於errno中。

Sample:(一次讀一行)
fscanf_s(fp, "%[^\n]\n", &buffer, 20)