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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- Visual Basic(VBA) visual basic初心者です。 visual studioで電卓を作成しています。 実行時にテ 1 2023/02/08 00:18
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) Excelについて▶あるセルに文字を入力すると、別のセルに色がつく(条件付き書式) 1 2022/03/27 16:43
- iPhone(アイフォーン) スマホ文字消しにくい 3 2023/07/27 15:23
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
coutで出力した文字を消去するためには?
C言語・C++・C#
-
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
コンソール画面のクリアの方法
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
標準出力の上書き
C言語・C++・C#
-
6
関数から配列を返すには?
C言語・C++・C#
-
7
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
8
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
9
scanf"でエンターで改行させない方法"
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4の倍数を論理演算で表す。。
-
10個出力で改行したいのですが...
-
hit&bolwのプログラミングがで...
-
defineで定数が置き換えられな...
-
strcmp
-
c言語 プログラム ピラミッド
-
コンパイルすると『breakの位置...
-
パスカルの三角形についてのCプ...
-
C言語での、年複利の計算方法...
-
if文がコンパイルエラーを起こ...
-
Cでオセロゲームプログラム
-
コンパイルエラーについて
-
困ってます!Cプログラミングに...
-
error C2143: 構文エラー : ';'...
-
C言語です このプログラミング...
-
平均合計偏差値標準偏差の出し方
-
Cプログラミングのアルゴリズム...
-
C言語についてです学籍番号、名...
-
円の面積を求めるプログラミン...
-
コマンドプロンプトがすぐ消える
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報