質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2755閲覧

エスケープシーケンス"\r"が動作しない。

taga

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

0クリップ

投稿2020/09/09 04:08

前提・実現したいこと

エスケープシーケンス"\r"復帰を使用し
printfの出力を上書きしたい。

発生している問題

文字列が上書きされない。

該当のソースコード

C

1#include <stdio.h> 2 3int main(void){ 4 printf("hoge_hoge1"); 5 printf("\rhoge_hoge2"); 6} 7

Output

1hoge_hoge1hoge_hoge2 2

試したこと

エスケープシーケンス"\b"によるバックスペースも試したが、文字列は消去されれなかった。
エスケープシーケンス"\n"による改行は正常に動作する。

補足情報(FW/ツールのバージョンなど)

下記の2つの環境で実行。
・IAR EW for Arm 8.50.5
・オンライン実行環境(paiza.io)

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

対応した動作環境というか...

そもそもエスケープシーケンスは「端末」の機能であって、C言語とは直接の関係はありません。ここでいう端末っていうのは、歴史的にみれば独立した機械であったもの。VT100とかが有名でしたが。これで、受け取った文字を表示することと、キーボード入力をコンピュータに伝えるだけの機械です(余談:この辺の存在が「標準入出力」なんてものにも大きく影響しているのでしょう)。
で、こういう機械が、エスケープ文字を受けた後の文字を特別に解釈して様々な表示を行っていたのです。

現代では、コンピュータの能力が高くなって、そういうのがコンピュータ本体に取り込まれてしまったのでデータのやり取りが見えにくくなってしまいましたが、つまり、かつての「端末」の機能を持つ端末プログラムがエスケープシーケンスの処理を行う機能を持っていなければ、エスケープシーケンスもただの文字としてしか扱われません。

IARのEWからの表示であれば、何らかの端末プログラムを使っていると思います。日本ではシェアの高いTeraTermであれば端末のエミュレーションモードを持っていますから、それで受けてみてはいかがでしょうか。組み込みであれば、開発環境がどうであれ実際のターゲット環境で対応しているかどうかがキモですが。

オンライン実行環境は、「コンパイラの動き」をちょっと試すとかいうものであって、画面をいじくるような用途はあまり考えられていないのではないかと思います。

ついでに。コマンドプロンプトは、MS-DOSの痕跡が残るWindowsの頃は(MEまで?)ANSI.SYSとか入れるとエスケープシーケンス対応してましたが、cmd.exeになってからは対応が外れていました。相当のことはwin32APIを使って制御することになります。
が、Windows10からエスケープシーケンスが復活しています。おまじないが必要ですが。この辺が参考にると思います。

投稿2020/09/09 22:55

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/09/10 23:21

詳細な背景まで教えて頂きありがとうございます! ターゲット環境で対応しているかキモということでしたが、対応してない場合はTeraTermのエミュレーションモードを使用してもエスケープシーケンスは使えないということでしょうか?
thkana

2020/09/11 02:44

Teratermを使うことと他の端末を使うことは排他です。あなたのターゲット環境で使う端末がエスケープシーケンスを処理できるかどうかとTeratermは関係ありません。もちろん、ターゲット環境の端末としてTeratermを使う、という可能性はありますが。
taga

2020/09/13 14:09

ご回答いただきありがとうございます!Teratermで出力を試してみたいと思います!
guest

0

オンライン実行環境はあくまでも標準出力されたものを疑似的に出力しているにすぎないので、エスケープシーケンスまでは再現されていないです。
Windowsならコマンドプロンプト、Unix系ならシェルで動作させる必要があります。
ちなみに他のオンライン実行環境も似たようなものでした。

https://www.tutorialspoint.com/compile_c_online.php

https://ideone.com/

投稿2020/09/09 04:17

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/09/09 04:48

対応した動作環境ではないと動作できないのですね! 他のオンライン実行環境の例まで挙げて頂き、ありがとうございます!
guest

0

あなたのPCのコマンドプロンプトで実行してみよう。
その動作をサポートしてなければ動きませんよ

投稿2020/09/09 04:12

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taga

2020/09/09 04:50

ご回答いただきありがとうございます。 質問なのですが、サポートされていない環境(例えばI、AR EW for Arm 8.50.5)で上書き出力を行いという場合にはどうすればよろしいでしょうか?
y_waiwai

2020/09/09 06:13

その環境上でどういうコマンドでカーソル操作ができるのかを調べないとしようがないですね
taga

2020/09/09 15:02

承知いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問