gotoxy() sin el encabezado conio.h

La función gotoxy(), que permite escribir en cualquier parte de la pantalla, esta declarada en el encabezado <conio.h>, la cual viene en los compiladores del Turbo C y Borland C++, pero si usas otro compilador esta función no existe. La cabecera <conio.h> fue portada a otros compiladores pero actualmente ya se encuentra obsoleta, sin embargo todavía se siguen viendo muchas lineas de código que incluyen esta función. Para poder compilar antiguos programas que usaban esta función con los compiladores de hoy en día, lo mejor es usar una función equivalente y deshacernos de <conio.h>

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

using namespace std;

bool gotoxy(unsigned short x, unsigned short y)
{
   HANDLE hstdout;

   if ((hstdout = GetStdHandle(STD_OUTPUT_HANDLE)) == INVALID_HANDLE_VALUE)
      return false;

   if (SetConsoleCursorPosition(hstdout, (COORD){x,y}) == 0)
      return false;

   return true;
}

int main()
{
    gotoxy(23,10);
    cout << "DavidXL -> davidxl.blogspot.com" << endl;
    gotoxy(20,23);

    return 0;
}

Si se va a usar mucho seria mejor, mas eficiente "sacar" de la función algunas lineas que solo hace falta que se ejecuten una vez, y así va mas rápido.

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

using namespace std;

HANDLE hstdout;

void gotoxy(unsigned short x, unsigned short y)
{
   SetConsoleCursorPosition(hstdout, (COORD){x,y});
}

int main()
{
    hstdout = GetStdHandle(STD_OUTPUT_HANDLE);

    gotoxy(23,10);
    cout << "DavidXL -> davidxl.blogspot.com" << endl;
    gotoxy(20,23);

    return 0;
}

Me he estado riendo un rato con esto que leí en un foro:

No la utilices, es un crimen, es la llamada programación spaguetti xD

Comentarios