Как перемещать курсор в консоли (C, C++)

Сегодня поговорим о консольных приложениях на языках C и C++. Многие люди часто сталкиваются с проблемой, которая связана с тем, что необходимо переместить курсор (каретку) в нужную позицию. Это обычно нужно, если Вы как-то пытаетесь украсить вид программы. Тривиальный пример: вывести подсказку пользователю. С этим проблем обычно не возникает. Для того чтобы перемещать курсор достаточно делать вывод некоторых специальных символов. Рассмотрим пример:

putchar(' ');		// Перемещение каретки вправо на одну позицию
putchar('\b');		// Перемещение каретки влево на одну позицию
putchar('\n');		// Перемещение каретки на новую строку

Тут все понятно, однако есть одна проблема - так нельзя переместить каретку на строку вверх. Например, при вводе "5 + 10 = " и последующем нажатии клавиши "Enter" программа выполняется и выводит результат "15". Однако вывод числа будет уже на новой строке. А что делать, если нужно вывести на этой же строке сразу же после знака равенства?

Чтобы это реализовать нужно использовать совсем другой способ, который рассмотрим в следующем листинге.

#include <stdio.h>
/*Подключение Windows.h обязательно!*/
#include <Windows.h>
int main() {
COORD position;										// Объявление необходимой структуры
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);	// Получение дескриптора устройства стандартного вывода
position.X = 10;									// Установка координаты X
position.Y = 15;									// Установка координаты Y
SetConsoleCursorPosition(hConsole, position);		// Перемещение каретки по заданным координатам
puts("Hello World!");								// Вывод сообщения
return 0;
}

На выходе программы в консоли будет сообщение "Hello World!", первый символ которого будет иметь координаты (10; 15).

Вот таким интересным способом можно передвигать каретку в консоли, так что пробуйте, экспериментируйте. Я надеюсь, у Вас все получится Как перемещать курсор в консоли (C, C++) (C, Консоль)

2 отзыва на “Как перемещать курсор в консоли (C, C++)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *