Вопрос по console, windows, c++, c – Переместить текстовый курсор к определенной координате экрана?

5

Как я могу установить курсор в нужном месте на консоли в C или C ++?

Я помню функцию под названиемgotoxy(x,y), но я думаю, что она устарела. Есть ли альтернатива?

Курсор клавиатуры. user1232138
Если вы используете Unix,curses или жеncurses библиотека предоставляет средства, которые вам нужны. Jonathan Leffler
@BenjaminLindley: я не согласен. Консоль Windows прекрасно подходит для решения многих простых двумерных текстовых задач, и это намного проще, чем копаться в универсальной мультимедийной библиотеке. Harry Johnston
Возможно, вы могли бы попробовать некоторые изthese suggestions smocking
Это не является частью стандарта C или C ++. Вам придется использовать API. На какой курсор вы ссылаетесь? Мышь? Курсор клавиатуры в терминале? smocking

Ваш Ответ

5   ответов
1

Ncurses библиотека, функция, которую вы послеmove (row, column).

1

что такое HANDLE, если вы действительно не погружаетесь в консольные приложения, объект COORD находится в стандартной библиотеке windows.h и имеет два элемента данных-члена X и Y. 0,0 слева вверху угол и Y увеличивается, чтобы идти вниз по экрану. Вы можете использовать эту команду и просто продолжать использовать std :: cout & lt; & lt; распечатать все, что вам нужно.

#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);
}
4

они видят только потоки байтов, которые не имеют собственных характеристик отображения. Существует ряд сторонних API, таких какNcurses чтобы помочь вам сделать это.

Если вы хотите быстрое решениеand терминал, с которым вы работаете, понимаетEscape-последовательности ANSIтогда вы можете делать такие вещи, как

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

переместить курсор к определенной строке и столбцу (где верхний левый угол равен {1,1}). Тем не менее, вам лучше использовать ncurses (или эквивалент для вашей платформы).

3

SetConsoleCursorPosition.

В той же части библиотеки MSDN есть множество других функций. Некоторые из них тоже могут быть полезны.

-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.

В отличие от gotoxy, ваша функция может только перемещать курсор вперед. Кроме того, позиция относительно текущей позиции курсора в вашем решении - если курсор находится в точке (x, y), то вызов setPos (a, b) перемещается в ((y == 0? X: 0) + a, y + b) - поэтому новая x-координата зависит от параметра, который вы передаете для y.
Именно так. этоshifting вывод на желаемое смещение. Фактически это происходит благодаря производству продукции. Если я правильно помню, я использовал что-то вроде этого для табличного форматирования вывода.
Если вы печатаете\r и затем двигаться вперед, вы можете перейти к произвольному столбцу, верно? Вы сможете контролировать координату Y только в том случае, если знаете ширину терминала, поскольку выходные данные будут естественным образом переноситься через определенные промежутки времени. Если это работает вообще, я бы начал с\r или же\n чтобы убедиться, что вы начинаете с (0,0), и убедитесь, что ничего не печатается одновременно.

Похожие вопросы