SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: karmakoma en Miércoles 10 de Marzo de 2004, 09:52

Título: Presione Cualquier Tecla Para Continuar....
Publicado por: karmakoma en Miércoles 10 de Marzo de 2004, 09:52
Hola a todos.

A alguien se le ocurre una funcion para limpiar la pantalla que sea lo mas portable posible? (windows y linux). Yo suelo usar en linux system("clear") pero para windows, logicamente, no vale.

Y aprovechando, a alguien se le ocurre alguna manera de implementar el tipico mensajito "Presione cualquier tecla para continuar...." Lo he intentado con scanf, getchar, gets... pero no funciona correctamente.

Un saludo y gracias  :D
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: mabrev en Miércoles 10 de Marzo de 2004, 10:35
Hola:

  Yo siempre he limpiado la pantalla utilizando system("clear") o system("cls") porque siempre sabía en que S.O. iba a ejecutarse el programa. No sé ninguna otra forma de limpiar la pantalla, a no ser recurriendo a la chapucilla de mostrar por pantalla un montón de líneas en blanco con un bucle.

  En cuanto a lo de "Presione cualquier....", creo recordar que en linux existe la función getch(), que hace exactamente lo que quieres, lo que no entiendo muy bien es por qué no te funciona utilizando getchar().

  Espero que te sirva.

Saludos
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: © Jonathan © en Miércoles 10 de Marzo de 2004, 14:26
Hola, para limpiar la patalla en windows yo utilizo:

 clrscr();

   Que se encuentra en la libreria conio.h
   Saludos :hola:
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: The Black Boy en Miércoles 10 de Marzo de 2004, 15:44
yo he sacado el mensaje "presione cualquier tecla" cuando  utilizo la
funcion:
getch(); que se encuentra en la libreria "conio.h"

aclarando que esto lo hize en el Borland C++, espero que te sirva.

___Salu2___   :kicking:
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: karmakoma en Lunes 15 de Marzo de 2004, 10:28
Con respecto al mensajito "presione...." lo he implementado con getch y funciona muy bien  :D  aunque yo creia que ya lo habia probado con esta funcion  :huh:

Con respecto a clrscr creo que no es una funcion ansi c y ya sabeis lo pesados que son los profesores con que todo sea ansi c por lo que he recurrido a system("clear") o "cls" segun proceda  ;)

Muchas gracias a todos y un saludo.
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: QliX=D! en Lunes 15 de Marzo de 2004, 15:56
Algo para salir rapidisimo del paso...

Código: Text
  1.  
  2. #ifdef WIN32
  3.   #define CLEAR "clscr"
  4. #else
  5.   #define CLEAR "clear"
  6. #endif
  7.  
  8. .
  9. .
  10. .
  11. system (CLEAR);
  12. .
  13. .
  14. .
  15.  
  16.  

Otra?:

Código: Text
  1.  
  2.  
  3. char blankScreen[80][25]; // O detectas la resolucion y lo haces dinamicamente.
  4.  
  5. //Seteamos el buffer "limpio":
  6. for (int i=0; i<25;i++)
  7.   blankScreen[0][i] = memset((void*)blankScreen[0][i], ' ' , size(blankScreen[0]));
  8.  
  9. //para blanquear:
  10. cout << blankScreen; //o printf(....)
  11.  
  12.  

Creo que eso debberia andar...
No lo probe aun, pero el efecto es obvio, en el segudno caso...
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: Kev en Jueves 18 de Marzo de 2004, 23:52
Ahora me encuentro algo bloqueado pero se me ocurre algo no se si te sirva:

main()
{
for(int i=0;i<=100;i++)
{
printf("\n");
}

}


Nota.- No lo probe, estoy en un café, pero por ahi va la cosa.
Salu2
 :kicking:
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: NRM en Viernes 19 de Marzo de 2004, 03:05
Cita de: "© Jonathan ©"
Hola, para limpiar la patalla en windows yo utilizo:

clrscr();

Que se encuentra en la libreria conio.h

Esta libreria no es ANSI y tampoco es portable. Habia encontrado un port para GNU/Linux pero la verdad no lo recomiendo para nada.

Cita de: "The Black Boy"
yo he sacado el mensaje "presione cualquier tecla" cuando utilizo la
funcion:
getch(); que se encuentra en la libreria "conio.h"

aclarando que esto lo hize en el Borland C++, espero que te sirva.

Nuevamente no recomiendo el uso de esta. :(

Cita de: "QliX=D!"
Código: Text
  1.  
  2. #ifdef WIN32
  3.   #define CLEAR &#34;clscr&#34;
  4. #else
  5.   #define CLEAR &#34;clear&#34;
  6. #endif
  7.  
  8. .
  9. .
  10. .
  11. system (CLEAR);
  12. .
  13. .
  14. .
  15.  
  16.  

Me parece que utilizar el preprocesador seria la mejor solucion, como propuso QliX=D!.
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: desorden en Sábado 20 de Marzo de 2004, 13:52
Tambien puedes usar secuencias especiales de caracteres que define ANSI. La siguiente línea de código borra la pantalla:

printf("%c[2J", 27);

Para que funcione en sistemas Windows debes usar una terminal que soporte ANSI. Antiguamente estos códigos se cargaban con el archivo ANSI.SYS.
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: JuanK en Sábado 20 de Marzo de 2004, 15:57
apoyo mas el planteamiento de QliX=D!
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: QliX=D! en Lunes 22 de Marzo de 2004, 21:17
Cita de: "desorden"
Tambien puedes usar secuencias especiales de caracteres que define ANSI. La siguiente línea de código borra la pantalla:

printf("%c[2J", 27);

Para que funcione en sistemas Windows debes usar una terminal que soporte ANSI. Antiguamente estos códigos se cargaban con el archivo ANSI.SYS.
No es estandar, no todas las consolas son ansi, ni soportan caracteres ansi.
La mejor forma para mi, es hacer una funcion que escriba una pantalla en blanco y posicione el cursor arriba de todo.
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: desorden en Martes 23 de Marzo de 2004, 02:35
Claro que no es estándar :), niguna de las soluciones que se han dado lo es. El estándar de C no dice en ningún sitio que la salida tenga que ser a una pantalla.

Imaginad que la salida se hace a algun tipo de impresora, con la solución de las líneas en blanco (¿cuántas líneas? ¿20? ¿50? ¿500?) no ganaríamos para papel :P

Un saludo...
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: carmamezo en Martes 23 de Marzo de 2004, 20:55
Buenas a todos!!!
en cuanto a lo de pulsa una tecla para salir existe una función muy simpática:
kbhit() //conio.h
keyboard hit (indica si se ha presionado alguna tecla, se puede recoger lo pulsado mediante un getch o getchar).
No detiene la ejecución del programa a la espera de que se introduzca un dato.
En cuanto a la función de limpieza de pantalla en ANSI C está la funcion clrscr() en la librería conio.h.
También están dentro de la misma librería:
clreol() //borra la línea actual desde la posición del cursor
delline() //borra la línea completa donde está el cursor y pone el cursor en la esquina superior izq.
gotoxy() //situa el cursor en unas coordenadas definidas
insline() //inserta una línea en blanco en la posición del cursor desplazando el resto de las lineas situadas debajo.
wherex() y wherey() //dan la posición actual del cursor.
En fin todas estas funciones son parte de la biblioteca de funciones de ANSI C, teoricamente debieran ser portables a cualquier SO.
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: karmakoma en Jueves 25 de Marzo de 2004, 09:54
Me ha gustado mucho la solucion de QliX=D! ya que la libreria conio.h no puedo usarla por no ser ANSI C.

Gracias a todos por vuestra ayuda  B)
Título: Re: Presione Cualquier Tecla Para Continuar....
Publicado por: amedinadiaz en Jueves 25 de Marzo de 2004, 20:44
Para limpiar la pantalla ya descubri un modo que no da warnings ni errores que creo se ha dicho aqui de forma parecida pero no exacta:

#include <stdlib.h>
.
.
.
system("cls");

Creo que lo que no se habia mencionado era el uso de la libreria <stdlib.h> ya que si no al compilar te da un "warning". Asi queda perfecto.