下面淺談了sscanf和fscanf的用法和自己的一些理解

文章目錄
- 流
- fscanf的使用
- sscanf的使用
- 總結
函式的引數對比




流
講三個函式前 先得明白流大概是個什么東西
我們寫的程式經常要和硬體交流 常見的有 光碟 鍵盤 螢屏 軟盤等
硬體不同 讀寫方式自然不同 溝通的方式也不同
那我們豈不是要學很多種"語言"

為了解決這種情況便出現了流 有點像水流 也有點像介質

于是我們便不用學那么多"語言"了 ,只用注意流這一種"語言"就行了!
(個人理解:可以理解成資料轉為了流 各種硬體有自己理解流的方式,而我們使用時只要注意流 不用關心硬體怎么理解流)
流也分檔案流、標準輸入流、標準輸出流等
流是個高度抽象的概念,使用的多了自然就有自己的理解

fscanf的使用

fscanf與scanf對比只多了一個FILE*的指標
fscanf(stdin,...)等同于scanf(...)

stdin是標準輸入流 也就是鍵盤 本質也是一個檔案流
fscanf的作用:從檔案中讀入資料 賦值給變數
例:

右邊是檔案里的資訊…
運行結果:

注:避免從檔案中讀入中文 會出現亂碼的情況 具體原因博主不知.有大佬知道可以評論告訴我
上面的例子中給結構體成員賦值了 同理也可以給各種型別的變數賦值
官方一點:將檔案中的資料格式化后輸入

sscanf的使用

sscanf和scanf對比只多了一個buffer指標
官方點:從一個字串中讀入格式化的資料
簡單點:從字串中讀入要的資料 (這也是為什么引數必須時字符指標的一個原因)
默認讀入是從stdin中讀入,在這讀入來源改成了字串而已.

問:ccl is a good man 提取出里面的每個單詞(有很多辦法實作切割,這里用sscanf試試)
別問ccl是誰

換個角度看:把a作為讀入的來源 把資料讀入了tmp五個陣列里(初始化了五個tmp字符陣列)
再舉個例子

這里把字串里的字符轉為了數字,或者說初始化了三個tmp
sscanf常用操作傳送門
總結
sscanf和fscanf不過是比scanf多了一個引數罷了
fscanf多了一個檔案流 (stdin和stdout本質也是檔案流)
sscanf多了一個字符指標
可以把這個不同的引數看作"源"
從源里面拿資料,再轉換為其他型別的資料(格式化成別的型別的資料)
前提是資料型別合法
sscanf可以實作切割字串等常見的字串操作
fscanf可以讓我們從檔案中拿到想要的資料
言而總之,sscanf和fscanf讓我們得到資料的方法多樣化 畢竟原來你只能從鍵盤(stdin)輸入資料

如果有啟發的話,留個贊再走吧,這對我幫助很大!
不點?

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294519.html
標籤:其他


