先日、C言語でASCII文字がくるくる回るスピナーの作り方を投稿しました。
https://hangstuck.com/langc-basic-spinner/
今回は、プログレスバーを作ってみます!
ソースコードと実行例
いきなりコードです。
#include <stdio.h> #include <unistd.h> int main(int argc, char *argv[]) { unsigned int i, j; for (i = 1; i <= 10; i++) { (void) sleep(1); printf("\033[2K"); putchar('['); for (j = 0; j < i; j++) putchar('#'); for (; j < 10; j++) putchar(' '); putchar(']'); puts(""); printf("\033[2K\033[G %d sec\n", i); printf("\033[2F"); fflush(stdout); // バッファを強制的に出力. } puts(""); // 改行表示. return 0; }
実行結果はこんな感じです。1秒ごとにバーが伸びていき10秒たつと終了します。シンプルなプログレスバーですね。
コードの解説
特に難しいコードではないですが、要点は printf("\033[
ですね。
これは ASCII エスケープコード といいます。
これを使うと文字に色をつけたりできます。また、カーソルの位置を変更したりもできます。この碧色工房さんのサイトに詳しい説明が載っています。
今回の例では下記の3つを使用しました。
printf("\033[2K")
は、その行を削除しますprintf("\033[G")
はカーソルを行頭に移動させますprintf("\033[2F")
はカーソルを2行上に移動させますこれらの他にも色々あります。その気になればいろんなアニメーションが作れます。ちょっとしたCUIでのインタラクティブなプログラムも作れますね。色々遊んでみてください!
まとめ
今回はC言語で、ASCII エスケープコードを使ってプログレスバーを書きました。ASCII エスケープコードを使えば可能性は無限大です!ぜひチャンレジしてみてください!
今回の投稿は、下記のサイトを参考にさせて頂きました。Go言語でスピナーなどを書く説明をされています。
コメント