
No.2ベストアンサー
- 回答日時:
エスケープシーケンスが使えないなら、恐らくWindowsのAPIを使わなくてはなりません。
GetConsoleScreenBufferInfoでコンソールのサイズなどを取得し、
ReadConsoleOutputでコンソールの内容を取得し、
不要な行を消去して、
WriteConsoleOutputで書き込めば良いはずです。
詳細はGoogleさんに聞けば、サンプルが見つかると思います。
しかし、printf等は検索結果やエラー情報など、後から消す必要の無いものを表示するためのものだと思います。
sorokukuさんがどのようなプログラムを製作中なのかはわかりませんが、無理に消す方法を探すよりも、普通のWindowsアプリにしてテキストコントロールやラベルで表示したほうが簡単だと思います。Visual C++ Expressでも.NETを使ったアプリなら作れるはずですし、Turbo C++と言う手もあります。
No.3
- 回答日時:
こんにちは。
> printfでエスケープシーケンスを使っても,うまく文字を消すことができなかったです.
とありますが、具体的にどのようなコード(プログラムのソース)を書かれたのでしょうか?
差し支えなければ、その部分(文字列を出力する部分~その文字列を消去する部分)のソース
(プログラムが小さければできれば全ソース)を提示して頂けないでしょうか?
その方が、回答者の方も問題を把握でき具体的なアドバイスも貰い易いかと思います。
参考までに、エスケープシーケンスを使用した文字列消去(行単位)のサンプルプログラムを
作ってみましたので、宜しければ試してみて下さい。
お使いの環境で上手くビルド及び実行できるかどうか判りませんが、多少なりともヒントになれ
ば幸いに思います。
なお、本サンプルは、当方では「Windows98SE+Visual C++ 5.0」の環境で作成&実行テスト
を行なっています。
また、本サンプルで使用しているエスケープ・シーケンスに関して下記サイトを参考にさせて頂きました。
■参考サイト
ANSI.SYS - キーボードと画面の拡張制御のサポート [FPCU]DOS/V&Windowsコマンド・プロンプト・リファレンス
http://www.fpcu.jp/dosvcmd/ansi.htm
■サンプルプログラム
/*
* tesc.c : エスケープシーケンスによる1行消去のテストプログラム
*
*【概要】
* コンソール画面に出力した文字列を行単位に出力した行数分消去を
* 行ないます。
*【補足】
* 1)本プログラムは、Windows系OS用のコンソールプログラムです。
* 2)コンソール画面のカーソル制御などのために、ANSIエスケープ・
* シーケンスを使用しています。
*
*<使用しているエスケープ・シーケンス>
* ※下記中の"ESC"はエスケープコード(0x1B)を意味します。
* ・ESC[s :カーソル位置の保存
* ・ESC[u :カーソル位置の復元
* ・ESC[nnA :カーソルを上にnn行移動(カーソルが最上行の時は無視される)
* ・ESC[K :現在行のカーソル位置以降を消去
*/
#include <stdio.h>
#include <conio.h>
/* define const */
#define ESC "\x1b" //エスケープ文字(ESC:0x1B)の定義
int main(void)
{
int i, icnt;
/* ダミー文字列の表示(1行表示毎に行カウンタを+1する) */
icnt = 0; //行カウンタのリセット
printf("01:*** 1行目***\n"); icnt++;
printf("02:*** 2行目***\n"); icnt++;
printf("03:*** 3行目***\n"); icnt++;
printf("04:*** 4行目***\n"); icnt++;
printf("05:*** 5行目***\n"); icnt++;
/* 表示した文字列の消去(現在行から遡って行カウンタ分の1行消去を行なう) */
_cputs(ESC"[s"); //カーソル位置の保存(現在行でカーソルが左端にあることが前提)
for(i=0; i<icnt; i++){ //行カウンタ分ループ
_cputs(ESC"[1A"); //カーソルを上に1行移動(カーソルが最上行の時は無視される)
_cputs(ESC"[K"); //現在行のカーソル位置以降を消去
}
_cputs(ESC"[u"); //カーソル位置の復元
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
コンソール画面のクリアの方法
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
fopenで別ディレクトリにファイルをオープンしたい
C言語・C++・C#
-
6
【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法
C言語・C++・C#
-
7
画面を強制的に再描画させる方法
C言語・C++・C#
-
8
テキストカーソル位置の取得
C言語・C++・C#
-
9
waitせずにキー入力があった場合のみ処理をさせたい(C言語)
C言語・C++・C#
-
10
C言語 1文字入力(Enterキーなし)
C言語・C++・C#
-
11
空白を含んだ文字列がうまく格納(表示)できない
C言語・C++・C#
-
12
system(cls")について"
C言語・C++・C#
-
13
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
14
coutで出力した文字を消去するためには?
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コンパイルエラーについて
-
H8マイコンCでprintf/scanfが使...
-
「%n」や「%S」は何故恥ずかし...
-
C言語プログラミング
-
C言語の勉強しています。すみま...
-
C言語で四則演算を使って10を作...
-
ピラミッド表示プログラム。
-
ホームページをC言語で作りたい...
-
最早開始時間と最遅完了時刻を...
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
値差の%計算方法について
-
数字以外が入力されたらエラー...
-
「Aに対するBの割合」と「Aに対...
-
VB6.0での小数点の扱いについて
-
【C++】関数ポインタの使い方
-
c languageで 簡単な質問があ...
-
ある商品のロス率を5%見込み、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
CTRL+Dでループを抜けるには
-
Cプログラムについて
-
コマンドラインに出力した文字...
-
WM_CLOSEで閉じれないウィンド...
-
C言語の&に関する質問
-
すごろくに使用するサイコロ
-
文字と数字の判定について
-
printf( " %2d", p * q );
-
【C言語教えてください】sin波...
-
%P と %X の違い
-
C言語の勉強しています。すみま...
-
strcmp
-
c言語でAからZまでを表示する...
-
unsigned int型について
-
(C言語)めちゃくちゃな値にな...
-
printf で二進表示を行いたい。
-
プログラミング C言語 課題でプ...
-
c言語で2000年以降カレンダーを...
おすすめ情報