• Domingo 22 de Diciembre de 2024, 17:19

Autor Tema:  Presione Cualquier Tecla Para Continuar....  (Leído 15325 veces)

karmakoma

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Presione Cualquier Tecla Para Continuar....
« en: Miércoles 10 de Marzo de 2004, 09:52 »
0
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

mabrev

  • Miembro MUY activo
  • ***
  • Mensajes: 126
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #1 en: Miércoles 10 de Marzo de 2004, 10:35 »
0
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

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #2 en: Miércoles 10 de Marzo de 2004, 14:26 »
0
Hola, para limpiar la patalla en windows yo utilizo:

 clrscr();

   Que se encuentra en la libreria conio.h
   Saludos :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #3 en: Miércoles 10 de Marzo de 2004, 15:44 »
0
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:
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

karmakoma

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #4 en: Lunes 15 de Marzo de 2004, 10:28 »
0
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.

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #5 en: Lunes 15 de Marzo de 2004, 15:56 »
0
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...
QliX=D! - From the top of Tsunami

Kev

  • Miembro HIPER activo
  • ****
  • Mensajes: 654
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #6 en: Jueves 18 de Marzo de 2004, 23:52 »
0
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:
La teoria es asesinada tarde o temprano por la experiencia
Albert Einstein
Kev - 3 DCE
-----------------------------------------------------
Articulos:
Convertir texto a imagen en ASP.NET
Trabajando con el Global.asax

NRM

  • Miembro MUY activo
  • ***
  • Mensajes: 279
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.narrowmind.com.ar
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #7 en: Viernes 19 de Marzo de 2004, 03:05 »
0
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!.

desorden

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #8 en: Sábado 20 de Marzo de 2004, 13:52 »
0
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.
desorden

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #9 en: Sábado 20 de Marzo de 2004, 15:57 »
0
apoyo mas el planteamiento de QliX=D!
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #10 en: Lunes 22 de Marzo de 2004, 21:17 »
0
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.
QliX=D! - From the top of Tsunami

desorden

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #11 en: Martes 23 de Marzo de 2004, 02:35 »
0
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...
desorden

carmamezo

  • Miembro MUY activo
  • ***
  • Mensajes: 232
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #12 en: Martes 23 de Marzo de 2004, 20:55 »
0
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.
No hay tonto más molesto que el ingenioso.

karmakoma

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #13 en: Jueves 25 de Marzo de 2004, 09:54 »
0
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)

amedinadiaz

  • Nuevo Miembro
  • *
  • Mensajes: 20
    • Ver Perfil
Re: Presione Cualquier Tecla Para Continuar....
« Respuesta #14 en: Jueves 25 de Marzo de 2004, 20:44 »
0
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.
He visto cosas que vosotros no creeriais...
Todos esos momentos...se perderan en el tiempo...
como lagrimas en la lluvia...

Por no comprarme la dichosa camara digital!!