LoginSignup
6
5

More than 5 years have passed since last update.

C初学者に捧ぐ、入門書じゃ説明されないキャリッジリターンは面白い

Last updated at Posted at 2016-03-02

エスケープシーケンス

Cプログラマならだれでも知ってるエスケープシーケンス。その理由としてprintf関数においてこいつは一生付き合わなくてはいけない存在だからだろう。RubyやPythonなどの高級言語からCを勉強した人はちょっと苦しむかもしれないその”書式付き”には
- エスケープシーケンス
- 変換仕様

この二つが必須だ。
ある程度の入門書ならエスケープシーケンスの説明のなかで

\n
\t
\b

この三つの説明は絶対というほどするであろう。それ以外にもエスケープシーケンスがあることも当然説明する。そのなかでひっそりと端の方に書いてあるのがキャリッジリターン

\r

の紹介があるだろう。でも説明を読んでも何かよくわからないし、どう使うかわからない、私も最初そう思いました。ということでキャリッジリターンの使い方を書いていきたいと思います。

そもそもどんなもの?

言葉だけで説明すると、標準出力の行に戻るというもので、別名「復旧」とも言われます。ようするにこれを使えばコマンドプロンプトの一行を変えることができるのです。
原理としては

aaaaaa

と出力されたあとにキャリッジリターンをすれば、

bbbbbb

と変えることができるのです。
一つ注意点としては
行の最初に戻って再度出力するだけなので、表示してあるものよりも短い文字数文出力しようとするともとの文字が少し残ってしますので、空白などで文字を稼いでください。

例えば01
printf("abcdef");
printf("\rb");

とすると

bbcdef

と出力されてしまいます。ので適当に文字の後ろに空白を入れてやるとうまく出力できます。

例えば02
printf("abcdef");
printf("\rb     ");

使ってみる

r.c
#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%まで表示が変わります。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5