エスケープシーケンス
Cプログラマならだれでも知ってるエスケープシーケンス。その理由としてprintf関数においてこいつは一生付き合わなくてはいけない存在だからだろう。RubyやPythonなどの高級言語からCを勉強した人はちょっと苦しむかもしれないその”書式付き”には
- エスケープシーケンス
- 変換仕様
この二つが必須だ。
ある程度の入門書ならエスケープシーケンスの説明のなかで
\n
\t
\b
この三つの説明は絶対というほどするであろう。それ以外にもエスケープシーケンスがあることも当然説明する。そのなかでひっそりと端の方に書いてあるのがキャリッジリターン
\r
の紹介があるだろう。でも説明を読んでも何かよくわからないし、どう使うかわからない、私も最初そう思いました。ということでキャリッジリターンの使い方を書いていきたいと思います。
そもそもどんなもの?
言葉だけで説明すると、標準出力の行に戻るというもので、別名「復旧」とも言われます。ようするにこれを使えばコマンドプロンプトの一行を変えることができるのです。
原理としては
aaaaaa
と出力されたあとにキャリッジリターンをすれば、
bbbbbb
と変えることができるのです。
一つ注意点としては
行の最初に戻って再度出力するだけなので、表示してあるものよりも短い文字数文出力しようとするともとの文字が少し残ってしますので、空白などで文字を稼いでください。
printf("abcdef");
printf("\rb");
とすると
bbcdef
と出力されてしまいます。ので適当に文字の後ろに空白を入れてやるとうまく出力できます。
printf("abcdef");
printf("\rb ");
使ってみる
# include <stdio.h>
int main(int argc, char const *argv[]) {
int i;
for(i=0;i<=100000.0;i++){
printf("\rProgress: %f%%", i/1000.0);
}
printf("\nDone");
return 0;
}
このコードは進行状況をパーセンテージを使って表しています。実行すると
一行で0~100%まで表示が変わります。