Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: 7emiliosk8 en 12 Febrero 2017, 03:38 am



Título: punto medio en cmd
Publicado por: 7emiliosk8 en 12 Febrero 2017, 03:38 am
Hola en el siguiente codigo, alguien me podria explicar estas lineas

Citar
#define PTO_MEDIO(s) (40 - strlen((s))/2 )

Citar
printf("%*s",PTO_MEDIO(texto) - 1," ");

No entiendo en la primera por que es 40 - ... si para el punto medio se supone que deberia ser una suma,

en la segunda no entiendo por que se le resta 1 al resultado :l

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define ANCHO_MAX 80
  6. #define PTO_MEDIO(s) (40 - strlen((s))/2 )
  7.  
  8. int main(int argc,char* argv[])
  9. {
  10.    char texto[79]; /*78 caracteres + '\0'*/
  11.    int i,j;
  12.  
  13.    do{
  14.        printf("Introduce un texto: ");
  15.        fflush(stdin);
  16.        fgets(texto,79,stdin);
  17.        if(strlen(texto)==78)
  18.        {
  19.            if(texto[77]=='\n')
  20.                texto[77]='\0';
  21.        }
  22.        else
  23.            texto[strlen(texto)-1]='\0';
  24.    }while(strlen(texto)==0);
  25.  
  26.    printf("\n");
  27.  
  28.    /*
  29.  
  30.     Ponemos 5 filas y strlen(texto) + 2 columnas
  31.  
  32.     Esto se puede cambiar introduciendo variables para crear un tabla con otras dimensiones
  33.  
  34.     */
  35.  
  36.    for(i=0;i<5;i++)
  37.    {
  38.        if(strlen(texto)<77)
  39.            printf("%*s",PTO_MEDIO(texto) - 1," ");
  40.  
  41.        if(i==0 || i==4)
  42.            for(j=0;j< strlen(texto) + 2;j++)
  43.                printf("*");
  44.        else if(i==2)
  45.        {
  46.            printf("*%s*",texto);
  47.        }
  48.        else
  49.        {
  50.            printf("*%*s*",strlen(texto)," ");
  51.        }
  52.  
  53.        if(strlen(texto)<78)
  54.            printf("\n");
  55.        /*else se llega al final de la linea y automaticamente el cursor pasa a estar en la
  56.         primera posicion de la siguiente linea*/
  57.    }
  58.  
  59.    printf("\n");
  60.    system("PAUSE");
  61.  
  62.    return 0;
  63. }
  64.  


Título: Re: punto medio en cmd
Publicado por: naidmen en 13 Febrero 2017, 01:13 am
No estoy muy seguro pero el punto medio es debido a que como su máximo es 80, ya que 80 es el limite de la pantalla, si se pasa pues el cursor situaría los asteriscos desordenamente, y con lo del menos uno debe ser por el \0 que en una cadena de caracteres significa el final y por lo obvio debes reservar su espacio si o si porque si no ocurriría lo que te dije anteriormente, se desordenaría en caso de que fueran más de 80 caracteres, el 80 es para el \0. Y además el punto medio no es una suma, se supone que el punto medio es un numero situado en la mitad de algo, si digo 80, su punto medio sería 40, y lo de la operación, es para partir de ahí y que se expanda hacía los lados. No se si me equivoque pero si lo hice por favor corrijanme.