C Primer Plus(5版)第8章練習問題説明(一)

1327 ワード

C Primer Plusの第5版の第8章の練習問題3は私がとても良い練習問題だと思って、入力関数、リダイレクトなどの多種の技術を考察して、この問題を完成して、C言語の標準I/Oに対してもっと深い認識があります.
入力した文字数をカウントするプログラムcountがあるとします.countプログラムでコマンドラインコマンドを設計し、ファイルessayの文字をカウントし、結果をessayctというファイルに保存します.
この問題の要求は、以下のようにまとめて分析します.
  • 題で入力文字数のカウントを要求する
  • 分析:この要求は以下の点に設計されています.
  • は、入力を受信できる関数を必要とする.getchar関数で試してもいいと思います.
  • この入力関数をどのように教えて、入力はすでに終わりました.フラグ入力終了は、リターンキーではなく、EOFという特有の終了フラグです.
  • カウント専用カウンタ.これは変数を1つ使えばいいです.

  • 2.countプログラムでコマンドラインコマンドを設計する
    分析:タイトル要求countプログラムはコマンドであり、cmdウィンドウまたはshellで実行する必要があります.これは難しくありません.countプログラムのコンパイルに成功すれば、実行可能なプログラムを生成すればいいです.
    3.ファイルessayの文字をカウントする
    解析:countプログラムの入力は、一般的なキーボード入力ではなく、既存のファイルから来ています.ではcountプログラムにファイルessayから文字を読み込ませ、ファイルが末尾に達したかどうかを判断する技術が必要です.この技術はリダイレクト技術だと思いますが、フラグファイルの末尾のフラグはEOFです.
    4.カウント結果をessayctというファイルに保存する
    分析:countプログラムは、単純な出力の大きなディスプレイではなく、カウントの結果をファイルに出力します.したがってcountプログラムが結果をファイルにインポートする技術が必要です.この技術もリダイレクト技術である.
    上の初歩的な分析があれば,この問題の要求を実現するために初歩的なコードを書くことができる.C言語コードは以下の通りである.
    #include 
    #include 
    int main(void)
    {
        int counter = 0; //   
        int ch; //           
        while( EOF != (ch = getchar()) ) //  getchar            ,            
        {
            counter++; //      
        } 
        printf("%d", counter);
        return 0;
    }