今回はcatコマンドに行数を表示させる-nのオプション付きで作ってみました。

catコマンド自体はたくさんソースが転がっていましたが、-nのオプション付きは中々見つからなかったので需要があるかと.

ただ、コードを見直して思ったのですが

めちゃくちゃ頭悪い...

絶対もっといい書き方できるだろ...というコードです。

これは参考程度にして自分なりにもっと見やすくわかりやすいコードを書くことをお勧めします。

簡単に説明をします。

【20行目~39行目】、この部分で引数に"-n"がある場合の処理を行っています。

【21行目~23行目】開くファイルの行数を求めます。

【25行目】行数を表示するようにもう一度ファイルを開きます。

rが行数,aが現在の行数チェックです。

【29行目以降】で一文字ずつfgecして"\n"の時には、putchar(c)をした後に行数rを出力する。

つまり行の最後に行ったら、改行して数字を出力する。という動作を期待します。

ここで、33行目,if(a<len)をしないと

期待の行数+1行表示してしまいます。

1:~~~~

2:~~~~

3:~~~~

4:

という状態になります。

初めの行だけはwhileのループ外で出力してr++しているので

whileループで行数+1の分だけrは進んでしまいます。

なので行数チェックaをわざわざ作って事前にファイルの行数を求めて
という面倒なことをしています。

とまぁ、期待通りの動作をしてはくれますが

あまりパッとしないコードです.

一応実行結果はこんな感じ.

$ ./mycat -n file
1:Hello,I've been studying English.
2:I like soccer.
3:Do you like soccer?
4:yes I do.
5:What kind of soccer do you like?

 

おすすめの記事
SponsoredLink