小夥伴們,對C語言程式設計有疑問的,可以加微信交流:poo_poo或者掃描我的頭像,驗證時請註明是“知友”

一、題目描述

本題是第8章程式設計題的第一道題,題目如下:

C Primer Plus(5版)第8章程式設計題1_重定向實現

C Primer Plus(5版)第8章程式設計題1_重定向實現

二、題目及思路分析

從題述來看,有如下幾個關鍵點:

有這麼一個文字檔案

讀入檔案中的文字

統計檔案中字元數

判斷檔案的結尾

以上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題

五、執行結果

C Primer Plus(5版)第8章程式設計題1_重定向實現

C Primer Plus(5版)第8章程式設計題1_重定向實現

執行本程式時,在命令列視窗執行。

如果你開啟文字檔案,去一個個數字符的話,你會發現只有95個字元,為何執行結果卻輸出97個字元?

這是因為文字檔案中還包含了兩個你看不見的字元,就是換行符了,文字檔案中包含了2個換行符。

這道題先這樣了,有疑問的可以一起討論。