We All Get Old - Naskin Diary

Yet Another My Life On The Web

カウントダウンするsleep関数 - C言語

暇つぶしに。例解UNIXプログラミング教室のサンプルコードを実装していたら、1秒sleepするごとにループ回数をプリントしているコード例が掲載されていたので、これをベースにして残りのスリープ時間をカウントダウンしていくsleep関数のラッパー関数が作れるんじゃないかと閃いた。


リポDボットの作成が落ち着いたところでカウントダウン機能付きsleep関数の作成に着手。

命名

最初は cdsleep で作っていたけど、CD(Compact Disc) 関連のものと見えそうなので、目に見えるsleep、visual sleep から vsleep と命名。

仕組み

ループに入ったらまず1秒スリープ。


sleep する秒数の桁数を取得し、まず最初に大きい桁から一文字づつプリントする。


1の位を10で割って余りが9位外の時は"\b"で一文字戻ってからそのまあ余りをプリントする。


余りが9の時は上の桁の数字が減ったということなので、残りの秒数を一番大きい桁からプリントしなおす。


一桁ずつ上の数値をみて無駄な戻りを減らせるように挑戦してみたけど、うまく実装できなかったので諦めた。。。

実行

文字だけだと伝わりにくいので実行した画面をスクリン・クロラというキャプチャソフトで動画にしてみました。

音もないし、ただカウントダウンしていくだけなのでたいへん地味です!!

Github のリポジトリ

せっかく作成したものなので Github に vsleep というリポジトリでアップしてみました。


Ripository:http://github.com/naskin77/vsleep
Source:http://github.com/naskin77/vsleep/blob/master/C/vsleep.c