2015年9月10日 星期四

scanf(Read formatted data from stream(File *))

Function define: int scanf(const char * format,.......);

Header: #include<stdio.h>

函數說明: scanf()會將輸入的數據根據參數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 輸入數據為單一字符(char)。
[] 讀取數據但只允許括號內的字符。如[a-z]。
[^] 讀取數據但不允許中括號的^符號後的字符出現,如[^0-9].

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

Sample:
Read a line
while(EOF != fscanf(streams, "%[^\n]\n", buffer)) {
printf("%s\n", buffer);
}

Read a lot of varibles
while(fscanf(streams, "%d %s %s %s", &d1, &s2, &s3, &s4) != EOF ){
printf("%s\n", s2);
}

Reference:
http://stackoverflow.com/questions/20108334/traverse-file-line-by-line-using-fscanf
http://www.cplusplus.com/reference/cstdio/fscanf/
https://msdn.microsoft.com/zh-tw/library/6ybhk9kc.aspx

沒有留言:

張貼留言