10

CまたはC++でコンソールの目的の場所にカーソルを設定するにはどうすればよいですか?

と呼ばれる関数を覚えていgotoxy(x,y)ますが、廃止されたと思います。代替手段はありますか?

4

8 に答える 8

11

CもC++も、画面やコンソールの概念を持っていません。固有の表示特性を持たないバイトのストリームのみが表示されます。それを支援するncursesのようなサードパーティのAPIがいくつかあります。

クイックアンドダーティソリューションが必要で、使用している端末がANSIエスケープシーケンスを理解している場合は、次のようなことができます。

printf("\033[%d;%dH", row, col);

カーソルを特定の行と列(左上隅は{1,1})に移動します。ただし、ncurses(またはプラットフォームの同等のもの)を使用する方がよいでしょう。

于 2012-05-01T18:44:19.280 に答える
6

SetConsoleCursorPositionを使用します。

MSDNライブラリの同じ部分には他にもたくさんの関数があります。それらのいくつかも役立つかもしれません。

于 2012-05-02T02:16:07.443 に答える
3

ncursesライブラリについて話している場合、必要な関数はですmove (row, column)

于 2012-05-01T17:53:39.680 に答える
2

私は本当に簡単な方法を使用します。コンソールアプリケーションに実際に飛び込んでいない限り、HANDLEが何であるかを過度に知る必要はありません。COORDオブジェクトはwindows.h標準ライブラリにあり、2つのメンバーデータインターガーXとYがあります。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);
}
于 2016-05-25T19:44:26.010 に答える
1

これはstackoverflowにありました...

`#include <stdio.h>

// ESC-H, ESC-J (I remember using this sequence on VTs)
#define clear() printf("\033[H\033[J")

//ESC-BRACK-column;row (same here, used on terminals on an early intranet)
#define gotoxy(x,y) printf("\033[%d;%dH", (y), (x))

int main(void)
{
    clear();
    gotoxy(23, 12);
    printf("x");
    gotoxy(1, 24);
    return 0;
}`
于 2019-12-25T03:18:46.147 に答える
1

これを使用して、カーソルを画面上の特定の座標に設定し、cout <<またはprintfステートメントを使用して、コンソールに何かを印刷できます。

#include <iostream>
#include <windows.h>

using namespace std;

void set_cursor(int,int);

int main()
{
     int x=0 , y=0;
     set_cursor(x,y);
     cout<<"Mohammad Usman Sajid";

     return 0;
}

void set_cursor(int x = 0 , int y = 0)
{
    HANDLE handle;
    COORD coordinates;
    handle = GetStdHandle(STD_OUTPUT_HANDLE);
    coordinates.X = x;
    coordinates.Y = y;
    SetConsoleCursorPosition ( handle , coordinates );
}
于 2020-06-02T07:36:13.260 に答える
1

Windowsの場合:#include <windows.h>

#define cursor(x、y)SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE)、(COORD){x、y})

Linuxの場合:

#define cursor(x、y)printf( "\ 033 [%d;%dH"、x、y)

于 2021-10-22T21:33:27.807 に答える
-1

カーソルを設定するためにこれを理解しました。

#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のようなlibに関する仮定が必要になります。

于 2012-05-01T18:21:03.620 に答える