Cómo dejar de usar conio.h

La librería <conio.h>, es propiedad de Borland y sólo sus compiladores pueden usarla. Por lo tanto significa que conio.h, no es una librería estandar.

La librería conio se utiliza más que nada por sus comandos: getch(), clrscr(), gotoxy(), textcolor(), y textbackground(), los cuales usamos para darle mejor presentación a nuestros programas. Pero pensandolo bien, ¿en verdad necesitamos que los programas en consola se vean bien? La verdad es que no, lo que importa es que funcionen.

Aún así, algunas funciones de la librería conio.h se pueden sustituir con funciones estándares, por ejemplo.

  • Para sustituir getch(), solo necesitamos: cin.get(); la cual está en <stdio.h>. Si no funciona entonces tendremos que ponerla dos veces: cin.get();cin.get();, la cuestión es algo complicada de explicar.
  • Para sustituir clrscr(), solo necesitamos escribir system(“cls”); la cual está en <iostream> (es sin .h, se definiría así: #include<iostream>).
  • Gotoxy() es algo vanal, y además se puede sustituir usando \n (espacio hacia abajo) y \t (espacio hacia la derecha) dentro de un printf();
  • Y la verdad es que cualquiera te agradecerá que no le pongas fondo rosa y letras amarillas a tus programas.
  1. lin_mdotor dice:

    Acabo de encontrar este blog, y la verdad es que lo poco que he visto hasta ahora me ha parecido muy interesante, ya que hace poco que he empezado a estudiar programación en C y tiene buenos ejemplos.

    Estoy haciendo un programa en el que un asterisco se mueve en la terminal de comandos rebotando de lado a lado, tomando algunas variables como su posición y velocidad.
    A mi entender, para ello es imprencindible el gotoxy(), así que quería preguntarte si sabes alguna forma de sustituir el gotoxy() por otra función parecida que no sea exclusiva de Borland. Ya que creo que simplemente con el \n y \t del printf no se puede.

    Gracias y un saludo.

  2. JoseTN dice:

    Yo no sé casi nada de C,
    pero hace muchos años cuando se quería
    mover el cursor en una pantalla de texto
    había unos caracteres ASCII/ANSI que movian el cursor en las cuatro direcciones, creo que eran los códigos ESC escape más lo que sea,
    como se usa con las impresoras matriciales,

    http://ascii-table.com/ansi-escape-sequences-vt-100.php

    Es para terminal VT100, no sé si sirve para consola a secas.

  3. Ruben dice:

    Excelente, llevo dos dias con un problema y ya lo resolvi gracias a esto, no me funcionaba el cin.get(); pero ahora se que lo debo de poner dos veces.

    Gracias

  4. Alfonso dice:

    Hola, primero decir que me gusta mucho la idea de no utilizar conio.h, gracias por animarnos.

    Ahora tengo una pregunta, no me funciona cin.get() ni una ni dos veces…

    No debería de funcionar:
    #include

    int main()
    {
    char c;
    c=cin.get();
    printf(“La letra pulsada es %c\n”,c);
    return 0;
    }

    Muchas gracias!!

  5. Alfonso dice:

    Hola de nuevo, dos cosas:

    en el trozo de código faltaría stdio.h pero no aparece.

    te pido perdón porque no me he dado cuenta que hablabas de C++, yo programa en C, se te ocurre algo?

    Muchas gracias!

  6. Ésta función hace lo mismo que el gotoxy

    //funcion gotoxy
    void gotoxy(int x,int y)
    {
    printf(“%c[%d;%df”,0x1B,y,x);
    }

  7. La verdad es que ejecutar system(“cls”); no es demasiado rápido y encima vale sólo para sistemas Windows. Como dice JoseTN sería mejor usar códigos ANSI. Por otra parte, no podemos sustituir gotoxy por \n y \t como bien dice lin_mdotor.

    Puedes probar algo como: http://totaki.com/poesiabinaria/2009/05/colores-y-posicionamiento-en-terminales-linux-como-conioh-en-dos/ a ver si te funciona.

  8. Manuel dice:

    Alfonso para usar la funcion “cin” en cualquiera de sus variantes tienes que usar la libreria “iostream.h” ya que esta funcion pertenece a esta y no a “stdio.h” igualmente si usas “cout”

    Tu codigo quedaria asi:

    #include

    int main(){
    char c;
    c=cin.get();
    printf(“La letra pulsada es %c\n”,c);
    return 0;
    }

    • Alfonso dice:

      Hola Manuel,
      Gracias por tu respuesta, pero no me ha funcionado.
      No encuentra iostream ni iostream.h . Por lo que no me reconoce cin.get().
      Como supongo que tendrá que ver con estas dos cosas repito que utilizo C y no C++ y Linux como SO.
      Un saludo

  9. A veces, es necesario el uso de gotoxy, en caso de pequeños UI en texto, y llamar a system para borrar la pantalla es muy lento.

    Propongo utilizaar para tareas de pantalla, códigos ANSI. Podemos encontrar librerías como conio for linux o stermp (http://totaki.com/poesiabinaria/?s=conio) que usan código ANSI entre otras cosas. También tenemos ncurses, pero esta es más avanzada.

  10. Un comentario esta dos veces de forma pareecida, creia que el otro día no había entrado… lo siento

Enlaces a “Cómo dejar de usar conio.h”

  1. [...] usando gotoxy sería mas fácil, pero este blog promueve el no uso de la librería conio.h (Cómo dejar de usar conio.h) así que lo vamos a hacer como les dije. #include<iostream> #include<string.h> using [...]

Deja tu comentario