Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: EduardoSaenz en 8 Mayo 2016, 21:52 pm



Título: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: EduardoSaenz en 8 Mayo 2016, 21:52 pm
Código escrito en C++, se crea el efecto de Marquesina desplazándose de izquierda a derecha y viceversa.

Código
  1. #include <iostream>
  2. #include <conio>
  3. #include <windows>
  4. #include <stdio>
  5.  
  6. main ()
  7. {
  8. int a=0, b=56, c=0, n=0;
  9. char t[25] ="Bienvenido a Borland C++";
  10. do
  11. {
  12. for (a=1;a<=56;a++)
  13. {
  14. clrscr ();
  15. gotoxy(a,1);
  16. cout<<t;
  17. Sleep (50);
  18. }
  19. for (b=56;b>=1;b--)
  20. {
  21. clrscr ();
  22. gotoxy(b,1);
  23. cout<<t;
  24. Sleep (50);
  25. }
  26. }while (c=1);
  27. getch ();
  28. }

Alguien que me pueda ayudar a traducir este mismo codigo y con el mismo efecto pero en codigo C para usarlo en el programa Dev C++ lo necesito para un proyecto, se lo agradecería mucho

MOD EDIT: Titulo y codigo modificado.


Título: Re: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: MAFUS en 8 Mayo 2016, 23:07 pm
Si no me equivoco Dev-C++ tiene conio.h así que si modificas las lineas
Código
  1. cout<<t
por
Código
  1. printf("%s", t);
debe funcionar.


Título: Re: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: EduardoSaenz en 9 Mayo 2016, 01:40 am
Gracias MAFUS si me sirvio!

me quedo de esta forma:


#include <conio.c>
#include <stdio.h>
#include <unistd.h>
#include <string.h>

int main ()
{
   char banner[]={"Este es un ejemplo de banner"};
   unsigned short derecha, izquierda, repite, longitud;
   
   longitud=strlen(banner);
   
   for (repite=1; repite<=3; repite++)
   {
      for (derecha=1; derecha<=longitud; derecha++)
      {
         gotoxy(derecha,1);
         printf("\b ");
         printf("%s",banner);
         usleep(100000);
      }
         for (izquierda=longitud; izquierda>=1; izquierda--)
         {
            printf("\b ");
            gotoxy(izquierda,1);
            printf("%s",banner);
            usleep(100000);
         }
   }            
            

   return 0;
}

ya se deplaza de izquierda a derecha las tres veces que quiero pero ahora solo me falta una cosa por ejemplo cuando empieza desplazandose de izquierda a derecha y topa en la derecha debe salir como si estuviera escondiendose y luego entrar de derecha a izquierda y hacer lo mismo y viceversa pero no se como hacer eso


Título: Re: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: HardForo en 10 Mayo 2016, 01:13 am
Debes saber cuantas columnas tiene esa consola y eso no es estandar que yo sepa.


Título: Re: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: tincopasan en 10 Mayo 2016, 09:58 am
salvo que esté muy errado las consolas tienen un máximo de 80 y cuando lo pasas con printf se imprime en la fila siguiente, asi que vas a la derecha y cuando el último caracter llega a 80 debe ser borrado (por ejemplo) y así con todos. 


Título: Re: Ayuda --- ! marquesina en c++ a c ! --- ayuda
Publicado por: MAFUS en 10 Mayo 2016, 11:01 am
Debes tener en cuenta dos casos diferentes. Cuándo estés al principio de tu marquesina y cuándo te encuentres en el final.
Como sabrás cuándo le des una cadena a printf, éste se pone a escribir lo que le des hasta que encuentre un carácter de fin de cadena '\0', así si tienes la cadena ABCDEF
Código
  1. printf("%s", cadena+0);
obtienes ABCDEF
en cambio, si escribes
Código
  1. printf("%s", cadena+3);
obtienes DEF. Recuerda que cadena es un puntero y puedes usar la aritmética de punteros.
Esto te sirve para el inicio de la marquesina.

Ahora para el final de la marquesina printf tiene unos especificadores de formato que te pueden ser útiles, como el de precisión, que no solo funcionan con los números.
Si tienes la anterior cadena ABCDEF y te interesa solo coger los tres primeros caracteres puedes usar
Código
  1. printf("%.3s", cadena);
y obtienes ABC
Ese 3 es literal y no hay forma de cambiarlo a no ser que cambies la cadena de formato. Pero los diseñadores de printf, que son muy listos, han hecho posible que nosotros, los pobres usuarios, tengamos una forma de escribir cuántos caracteres queremos. Mediante el carácter * podemos usar un argumento de printf para dar un tamaño.
Si escribimos printf así
Código
  1. printf("%.*s", tam, cadena);
Si tam=3 entonces obtenemos CAD.