getch() y getche() sin conio.h

Iniciado por abreu20011, 28 Julio 2012, 21:58 PM

0 Miembros y 1 Visitante están viendo este tema.

abreu20011

Saludos :)

Sólo queria preguntar una duda que tengo. Cuando compilo un programa en C e incluyo el #define <stdio.h> pero no el conio.h puedo usar las funciones getch() y getche.

Sin embargo, si busco en la librería de stdio.h no salen, sin embargo si para la librería conio.h.

¿Es posible que funcione por compilar desde Windows aunque no incluya las librerías? Es que no se muy bien por que pasa eso :)

Del mismo modo, puedo usar system() sin incluir stdlib.h :S

Gracias

Queta

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

abreu20011

Me pasa tanto usando el MinGW en windows, como con el de DevC++ :)

Queta

Dev-C++ usa MinGW también; el compilador te debe estar metiendo basura (DLLs adicionales que no necesitas) en tu ejecutable. Bájate el Dependency Walker para ver si se trata de eso.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

yoxter

no estoy seguro puede ser ncurses lo que buscas, no uso windows de momento pero creo que dev-c++ usa gcc y conio no existe para gcc
o tal vez uconio ?

pásate por aquí

http://es.tldp.org/Tutoriales/NCURSES/tutorial-ncurses.html




Posiblemente soy el intento de programador mas fracaso de la historia !!

Queta

conio.h no existe para Linux pero sí para Windows y es compatible con la gran mayoría de compiladores de C.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

rir3760

Cita de: abreu20011 en 28 Julio 2012, 21:58 PM¿Es posible que funcione por compilar desde Windows aunque no incluya las librerías? Es que no se muy bien por que pasa eso :)

Del mismo modo, puedo usar system() sin incluir stdlib.h
Es posible pero no se recomienda.

Antes de llamar a una función se debe indicar su prototipo para que así el compilador pueda verificar que las llamadas y definición (si aplica) coincidan. La forma usual es incluyendo el encabezado que corresponda. Por ejemplo:
#include <stdlib.h> /* Prototipo de "system" */

/* ... */

system("pause");


Si no se indica el prototipo el compilador asume lo siguiente:
1) El tipo de retorno de la función es "int".
2) El numero y tipo de cada argumento esta dado por la llamada.

Si ello no es correcto se presentan problemas. Por ejemplo:
#include <stdio.h>

int main(void)
{
   double num;
   
   num = atof("3.141592"); /* Falta el prototipo de "atof" */
   printf("%f\n", num);
   
   return 0;
}

Ahí el tipo de retorno de "atof" se asume como "int" cuando en realidad es de tipo "double".

Para evitar casos como ese lo mejor es incluir los prototipos (vía encabezados) y nos olvidamos del problema.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

abreu20011

#7
Saludos y muchas gracias por las diversas respuestas :)

El Dependency Walker lo he bajado y comprobado mi archivo, y no me entero mucho de como va, más que de que tengo un error (no sé si mi archivo, o un error del programa a leerlo) y sí, encontré la función getch() pero no aclara mi duda >.<

El NCurses lo miré por encima y tiene buena pinta, pero primero quiero acabar bien C y las librerías ANSI C que ponerme con otra cosa. Por otra parte, no entiendo muy bien en qué me puede ayudar respecto a mi duda.

Y respecto a a lo que dices rir3760, ¿como que es posible, pero no se recomienda? ¿Me estas diciendo que es culpa de Windows que se me añaden esas librerías? Si es asi, pues que allanamiento de la programación xD

He estado mirando, y me he dado cuenta de que puedo, sencillamente, no declarar ni un solo include que el programa anda. Con el error que dices, pero anda. ¿Esto es correcto? ¿Es decir, si no declaráis las librerías os va? :S

Que yo sepa, no debería ser así, no? Porque si no, ¿como sabe que printf hace una cosa y no otra? Me siento muy perdido ahora mismo xD

Un saludo

Queta

Cita de: abreu20011 en 29 Julio 2012, 05:26 AM
El NCurses lo miré por encima y tiene buena pinta, pero primero quiero acabar bien C y las librerías ANSI C que ponerme con otra cosa. Por otra parte, no entiendo muy bien en qué me puede ayudar respecto a mi duda.

Si quieres aprender, no uses conio.h ya que no forma parte del estándar.

Cita de: abreu20011 en 29 Julio 2012, 05:26 AM
Y respecto a a lo que dices rir3760, ¿como que es posible, pero no se recomienda? ¿Me estas diciendo que es culpa de Windows que se me añaden esas librerías? Si es asi, pues que allanamiento de la programación xD

Es posible si el compilador añade las librerías por defecto, la culpa no es de Windows. Por eso te digo que compruebes con el Dependency Walker a ver si realmente es el compilador quien te añade basura.
"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.

Fire544

#9
Mira abreu20011: Si andas en un compilador GCC en tu caso, dev-c++ compila con GCC, la causa a tu problema es que a veces cuando el IDE intenta buscar los binarios, libs e includes, no los encuentra porque pierde el enlce a los respectivos directorios. Verifica bien la configuracion de tu IDE y si el problema persiste entonces reinstala el IDE. Otra causa puede ser cuando incluyes libs que hacen llamadas desde si mismas a otras libs, por ejemplo windows.h hace llamdas a stdlib.h y tambien a winsock.h, sino reinicia tu ordenador y vuelve a iniciar el IDE y compila, si el problema sigue entonces postea nuevamente !!

Suerte amigo !! :xD
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".