C Primer Plus(5版)第8章程式設計題1_重定向實現
小夥伴們,對C語言程式設計有疑問的,可以加微信交流:poo_poo或者掃描我的頭像,驗證時請註明是“知友”
一、題目描述
本題是第8章程式設計題的第一道題,題目如下:
二、題目及思路分析
從題述來看,有如下幾個關鍵點:
有這麼一個文字檔案
讀入檔案中的文字
統計檔案中字元數
判斷檔案的結尾
以上4點都做到了,此題解完。那麼,這4步的每一步該如何解決呢?
1。 有這麼一個文字檔案
這個好解決,事先建立好一個文字檔案,裡面準備一些字元。我事先準備好了一個文字檔案,author。txt
2。 讀入檔案中的文字
這是要解決的第一個關鍵點。要讀檔案,必須得將檔案作為程式的輸入,解決方法有兩個:
1) 使用fopen等函式
這一方法的基本思路是:
a) 使用fopen函式開啟一個檔案,使得檔案作為程式的輸入
b) 使用getc等函式讀取檔案中的字元
c) 使用fclose等函式關閉檔案
2) 使用重定向
這一方法使用輸入重定向技術,使得stdin標準輸入重定向到檔案,而不是鍵盤。相比上一個方法,程式碼上要簡單的多。本程式採用的是這種方法。
3。 統計檔案中字元數
這個好解決,準備一個計數器。第2步中,每讀入一個字元,計數器加1。
4。 判斷檔案的結尾
這是要解決的第二個關鍵點,即,如何判斷讀取已經到了檔案末尾。
在C中,針對不同的系統,統一以一個“EOF”來表示檔案的末尾。這個“EOF”如果你去看它的定義,可能是一個整數值,比如“-1”。不少的I/O函式,如getchar(),遇到檔案末尾後就會返回“EOF”。本程式採用了這個技術點。
對於EOF的理解,可以參考我之前寫的文章:C Primer Plus(5版)第8章習題講解(二) - 知乎專欄
三、架構設計
無
四、程式碼
根據上述分析,核心程式碼如下:
while
(
(
ch
=
getchar
())
!=
EOF
)
{
putchar
(
ch
);
count
++
;
}
程式碼使用了getchar函式,每次從檔案中讀入一個字元,如果不是檔案末尾的話,則輸出當前字元,並且計數器加1。如果到達了檔案結尾,則退出迴圈。
完整的程式碼下載地址:
C Primer Plus(5版)第8章程式設計題第1題
五、執行結果
執行本程式時,在命令列視窗執行。
如果你開啟文字檔案,去一個個數字符的話,你會發現只有95個字元,為何執行結果卻輸出97個字元?
這是因為文字檔案中還包含了兩個你看不見的字元,就是換行符了,文字檔案中包含了2個換行符。
這道題先這樣了,有疑問的可以一起討論。