コマンドライン上で改行後の文字列削除

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
aria

コマンドライン上で改行後の文字列削除

#1

投稿記事 by aria » 14年前

はじめまして、C言語でどうしても判らないところがあり、皆さんの知恵をお借りしたいと思います。

コマンドライン上にprintf関数で出力した文字列があり、fgets関数で入力処理をした際、
入力の直前の行の文字列を消したいのですが、うまくいきません。
実行結果が下のようになればよいと思います。
//////////////////////////////
コマンドライン上
AAAAAAA
BBBBBBB
CCCCCC_←(ここで入力処理)


コマンドライン上
AAAAAAA
BBBBBBB
_
///////////////////////////////


fgets関数でコマンドラインから入力処理を行う際、最後にエンターキーを押しますよね。
問題は入力前の文字列をprintf("\r \r")を使って見た目上消そうとしたのですが、
入力後に改行が入るので行がずれてエスケープシーケンスが効きません。
windowsなので、エスケープシーケンスでカーソル制御も出来ず、どうすればよいかで困っています。

system(”cls”)を使わずでお願いいたします。

アバター
さかまき
記事: 92
登録日時: 14年前

Re: コマンドライン上で改行後の文字列削除

#2

投稿記事 by さかまき » 14年前

猫でもわかるプログラミング のC言語編58章、59章あたりを参考にすれば
コンソールAPIを使用してなんとかなるのではないでしょうか

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: コマンドライン上で改行後の文字列削除

#3

投稿記事 by ISLe » 14年前

C言語の標準機能ではできないので、何らかのライブラリの力を借りる必要があります。

いくつか案はありますが、
  1. fgetsを使わずconioで自前でエコーバックするようにして改行を握り潰す。
  2. Win32のコンソールAPIを直接使ってカーソルを移動させる。
  3. cursesライブラリを使ってカーソルを移動させる。
といったところでしょうか。
1は入力処理を自前で組む必要があってめんどうくさいし、環境依存があるかもしれません。
Visual C++なら1,2は追加のインストールとか無しで可能です。
ウインドウズに限定しないなら3が良いと思います。

non
記事: 1097
登録日時: 14年前

Re: コマンドライン上で改行後の文字列削除

#4

投稿記事 by non » 14年前

コンソールAPIでもカーソルを1つ上にあげるMS-DOSにおけるエスケープシーケンスの\033[1A の代わりをするのは
なかったと思います。しかし,指定場所にカーソルを移動させることはできますから,コンソールのどこに何という文字が
書かれているかを把握しておけばなんとかなります。
non

aria

Re: コマンドライン上で改行後の文字列削除

#5

投稿記事 by aria » 14年前

さかまきさん、 ISLeさん、nonさんすばやい回答ありがとうございます。
カーソルを操作できるヘッダを使って挑戦しようと思います。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る