はじめまして、C言語でどうしても判らないところがあり、皆さんの知恵をお借りしたいと思います。
コマンドライン上にprintf関数で出力した文字列があり、fgets関数で入力処理をした際、
入力の直前の行の文字列を消したいのですが、うまくいきません。
実行結果が下のようになればよいと思います。
//////////////////////////////
コマンドライン上
AAAAAAA
BBBBBBB
CCCCCC_←(ここで入力処理)
↓
コマンドライン上
AAAAAAA
BBBBBBB
_
///////////////////////////////
fgets関数でコマンドラインから入力処理を行う際、最後にエンターキーを押しますよね。
問題は入力前の文字列をprintf("\r \r")を使って見た目上消そうとしたのですが、
入力後に改行が入るので行がずれてエスケープシーケンスが効きません。
windowsなので、エスケープシーケンスでカーソル制御も出来ず、どうすればよいかで困っています。
system(”cls”)を使わずでお願いいたします。
コマンドライン上で改行後の文字列削除
Re: コマンドライン上で改行後の文字列削除
猫でもわかるプログラミング のC言語編58章、59章あたりを参考にすれば
コンソールAPIを使用してなんとかなるのではないでしょうか
コンソールAPIを使用してなんとかなるのではないでしょうか
Re: コマンドライン上で改行後の文字列削除
C言語の標準機能ではできないので、何らかのライブラリの力を借りる必要があります。
いくつか案はありますが、
1は入力処理を自前で組む必要があってめんどうくさいし、環境依存があるかもしれません。
Visual C++なら1,2は追加のインストールとか無しで可能です。
ウインドウズに限定しないなら3が良いと思います。
いくつか案はありますが、
- fgetsを使わずconioで自前でエコーバックするようにして改行を握り潰す。
- Win32のコンソールAPIを直接使ってカーソルを移動させる。
- cursesライブラリを使ってカーソルを移動させる。
1は入力処理を自前で組む必要があってめんどうくさいし、環境依存があるかもしれません。
Visual C++なら1,2は追加のインストールとか無しで可能です。
ウインドウズに限定しないなら3が良いと思います。
Re: コマンドライン上で改行後の文字列削除
コンソールAPIでもカーソルを1つ上にあげるMS-DOSにおけるエスケープシーケンスの\033[1A の代わりをするのは
なかったと思います。しかし,指定場所にカーソルを移動させることはできますから,コンソールのどこに何という文字が
書かれているかを把握しておけばなんとかなります。
なかったと思います。しかし,指定場所にカーソルを移動させることはできますから,コンソールのどこに何という文字が
書かれているかを把握しておけばなんとかなります。
non
Re: コマンドライン上で改行後の文字列削除
さかまきさん、 ISLeさん、nonさんすばやい回答ありがとうございます。
カーソルを操作できるヘッダを使って挑戦しようと思います。
ありがとうございます。
カーソルを操作できるヘッダを使って挑戦しようと思います。
ありがとうございます。