fscanf函式的應用

2022-02-17 02:24:41 字數 1409 閱讀 7480

**自:

以前老是被從文字裡讀取檔案,然後逐個的進行字元解析,感覺非常的慢,自從知道了fscanf函式之後,一切變的so easy!

fscanf函式用於從文字裡讀乙個字串到指定的陣列裡面:

[cpp]view

plain

copy

#include 

#include 

struct

node;  

intmain()  

這裡面要注意的是 1.txt裡面的內容是這樣的 001data,di,50,12345 沒錯,是用「,」號隔開的一些列字串,以前我們在解析的時候是把這一行讀出來,然後再乙個乙個字元解析,如果遇到「,」的話就分出乙個字串,但是fscanf一句話就搞定了,這裡%[ ],是掃瞄集的意思,%[^,]其中^的意思就是當fscanf乙個乙個字元從檔案讀上來的時候如果遇到「,」字元就會停下來,就會把前面讀取的字元存到buf中,比如 1.txt裡的內容,fscanf會一次的讀取001data 當他發現後面有「,」字元的時候就將001data存入buf.a中去了,也就是說^的意思是取反,就是遇到^後面的數就會停下來,那麼,%[^,],%[^,]

這種連著的用法又是什麼意思呢,注意,%[^,]  , %[^,]之間有個「,」,其實是這樣的,先看一下乙個小例子

[cpp]view

plain

copy

#include 

#include 

struct

node;  

intmain()  

這裡1.txt中的內容與上面的一樣,但是最後的輸出結果是: ata,di,50,12345

這回大家應該明白了吧,這個小例子中"001d%s「意思就是說從文字中讀取字串,從"001d"之後的位元組開始讀取,這回明白了fscanf(fp,"%[^,],%[^,],%[^,],%s",buf.a,buf.b,buf.c,buf.d);的意思了 ,就是說fscanf先讀取到001data的時候,發現後面有逗號,於是停下並且賦值,賦值之後(第一次賦值)

剩餘字串變為",di,50,12345"  也就是說第乙個是" , "號,那麼接下來scanf會省略這個逗號,從逗號後面的字元d開始繼續讀取在遇到第二個逗號,讀取第二個字串

即50,所以一次類推

總結:那麼以後可以任意的分解字串了,比如檔案裡的1.txt檔案中的內容為 001data|di,50 | 12345

我就可以這麼分fscanf(fp,"%[^|]|%[^,],%[^|]|%s",buf.a,buf.b,buf.c,buf.d); 分成的結果就是 001data di 50 12345

這裡還要注意fscanf與fget函式的區別:

fscanf 函式遇到空格或是'\n',都會停掉換到下一行

而fget函式只有遇到'\n'才會換到下一行

fscanf函式的用法

以前解析有規律的檔案的時候要麼用正規表示式,要麼就是傻傻的自己寫程式來解析有規律的檔案。今天突然發現c的庫函式中有乙個現成的可以解析有規律的檔案的函式,就是fscanf 函式。fscanf 函式 有點像正規表示式 功 能 從乙個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。...

fscanf()函式詳解

以前解析有規律的檔案的時候要麼用正規表示式,要麼就是傻傻的自己寫程式來解析有規律的檔案。今天突然發現c的庫函式中有乙個現成的可以解析有規律的檔案的函式,就是fscanf 函式。fscanf 函式 有點像正規表示式 功 能 從乙個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。...

fscanf()函式詳解

以前解析有規律的檔案的時候要麼用正規表示式,要麼就是傻傻的自己寫程式來解析有規律的檔案。今天突然發現c的庫函式中有乙個現成的可以解析有規律的檔案的函式,就是fscanf 函式。fscanf 函式 有點像正規表示式 功 能 從乙個流中執行格式化輸入,fscanf遇到空格和換行時結束,注意空格時也結束。...