Skip to content

tamadalab/2021fit_masuda_experiment1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

myhead

指定されたファイルの先頭からの指定行数を出力するプログラム myhead を作成してください. 雛形としてmain.cが与えられます.このmain.cを元に,与えられたそれぞれのステップに取り組んでください. それぞれのステップを適切に実装できれば,その都度GitHubに変更を push してください.

  1. 第1引数には行数,第2引数にファイル名が与えられます.与えられたファイルを先頭から指定された行数までを標準出力に出力しなさい.
  2. 引数に複数のファイルが指定された場合,各ファイルを同様に処理しなさい.
  3. 引数にファイル名が与えられなかった場合は,標準入力から受け取りなさい.

ステップ1

第1引数には行数,第2引数にファイル名が与えられます. 与えられたファイルを先頭から指定された行数までを標準出力に出力しなさい.

入出力例

./head 2 main.c # <- main.c の最初の2行を出力する.
#include <stdio.h>
#include <stdlib.h>

修正方針

次の修正を行ってください.

  • 9行目にファイルを開く処理を追加しましょう.
  • 5行目のprint_head関数の中身を実装しましょう.
    • exampleプロジェクト main.cprint_file関数の中身を参考にしましょう.
    • 繰り返しの先頭で,line_numberlimitを比べて,limitの方が大きければループを抜けましょう.

ステップ2

ステップ1の結果を元に,次の処理を追加してください. 引数に複数のファイルが指定された場合,各ファイルを同様に処理しなさい.

入出力例

./head 2 main.c README.md # <- main.c, README.md の最初の2行を出力する.
#include <stdio.h>    # <- main.c の内容.
#include <stdlib.h>
# Head                # <- この行から README.md の内容.

修正方針

次の修正を行いましょう.

  • performメソッド冒頭の if文の条件と中身を修正しましょう.
    • if文の条件を argc == 3 から argc >= 3 に修正しましょう.
    • if文の中で,for(i = 2; i < argc; i++) というループを作成し,ループ内で perform_each(argv[i], limit) を呼び出しましょう.

ステップ3

ステップ2の結果を元に,次の処理を追加してください. 引数にファイル名が与えられなかった場合は,標準入力から受け取りなさい.

入出力例

cat main.c | ./head 2 # <- 標準入力(main.c)の最初の2行を出力する.
#include <stdio.h>    # <- main.c の内容.
#include <stdlib.h>

修正方針

次の修正を行いましょう.

  • performメソッド冒頭の if文の条件と中身を修正しましょう.
    • if文の条件を argc >= 3 から argc >= 2 に修正しましょう.
    • ステップ2で作成したループ終了後に,argc == 2 の場合に,標準入力から受け取る処理を追加しましょう.
      • print_head(stdin, limit) を呼び出せば,標準入力から受け取って処理するようになります.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages