CまたはC++でコンソール上の目的の場所にカーソルを設定するにはどうすればよいですか?テキストカーソルを特定の画面座標に移動しますか?
私はgotoxy(x,y)
と呼ばれる機能を覚えていますが、その使用は推奨されていません。何か別の選択肢はありますか?
CまたはC++でコンソール上の目的の場所にカーソルを設定するにはどうすればよいですか?テキストカーソルを特定の画面座標に移動しますか?
私はgotoxy(x,y)
と呼ばれる機能を覚えていますが、その使用は推奨されていません。何か別の選択肢はありますか?
SetConsoleCursorPositionを使用してください。
MSDNライブラリの同じ部分には他にも多くの機能があります。それらの中には便利なものもあります。
ncursesライブラリーについて話している場合は、後にある機能はmove (row, column)
です。
カーソルを設定するためにこれを考え出しました。
#include <iostream>
void setPos(std::ostream& _os, const std::streamsize& _x, const std::streamsize& _y)
{
char tmp = _os.fill();
if(_y>0) {
_os.fill('\n');
_os.width(_y);
_os << '\n';
}
if(_x>0) {
_os.fill(' ');
_os.width(_x);
_os << ' ';
}
_os.flush();
_os.fill(tmp);
}
int main(int argc, char **argv)
{
setPos(std::cout, 5, 5);
std::cout << "foo" << std::endl;
return 0;
}
これ以上のことを行うには、解決策やライブラリの仮定が必要です(ncursesなど)。
gotoxyとは異なり、関数はカーソルを前方にのみ移動できます。カーソルが(x、y)にある場合、setPos(a、b)の呼び出しは((y == 0?x:0)に移動し、 + a、y + b) - 新しいx座標はyに渡すパラメータに依存します。 – Algoman
正確です。出力を所望のオフセットだけシフトする。実際には、出力を生成することによってこれを行います。私が正しくリコールすれば、テーブルのような出力フォーマットのためにこのようなものを使用しました。 – lupz
'\ r'を印刷して前に進むと、任意の列に進むことができます。端末の幅を知っていれば、Y座標を制御することができます。なぜなら、出力はその間隔で自然に折り返されるからです。それがまったく動作するなら、 '\ r'または' \ n'で始まり、あなたが(0,0)で始まっていることを確認し、何も同時に印刷しないようにします。 –
CやC++には画面やコンソールの概念がありません。それらは、固有の表示特性を持たないバイトのストリームしか見ることができない。 ncursesのような多数のサードパーティ製APIがあります。
あなたは間に合わせのn-ソリューションとをしたい場合は、使用している端末がANSI escape sequencesを理解し、その後、あなたが特定の行と列にカーソルを移動する
printf("\033[%d;%dH", row, col);
のようなものを行うことができます(左上隅は{1,1}です)。あなたはncursesを使う方が良いでしょう(またはあなたのプラットフォームに相当するもの)。
私は本当に簡単な方法を使用します。コンソールアプリケーションを実際に使用している場合を除き、HANDLEが何であるかを知る必要はあまりありません.COORDオブジェクトはwindows.h標準ライブラリにあり、XとYの2つのメンバーデータintergersを持っています.0,0は左上ですコーナーとYが増加して画面を下ります。このコマンドを使用して、std :: cout < <を使い続けるだけで、必要なものを印刷することができます。
#include <windows.h>
int main(void){
//initialize objects for cursor manipulation
HANDLE hStdout;
COORD destCoord;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
//position cursor at start of window
destCoord.X = 0;
destCoord.Y = 0;
SetConsoleCursorPosition(hStdout, destCoord);
}
これは標準CまたはC++の一部ではありません。 APIを使用する必要があります。どのようなカーソルを参照していますか?マウス?ターミナルのキーボードカーソル? – smocking
キーボードカーソル。 – user1232138
リニアテキスト出力以上のものを使いたい場合は、コンソールから完全に離れてください。開発者側でもユーザー側でも心配することはあまりにも多くの特権があります。 2Dグラフィックス([SFML](http://www.sfml-dev.org/)、[SDL](http://www.libsdl.org/))をサポートするライブラリを入手し、グラフィカルテキスト出力を使用してテキストを出力する機能。 –