elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  punto medio en cmd
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: punto medio en cmd  (Leído 1,511 veces)
7emiliosk8

Desconectado Desconectado

Mensajes: 73


Ver Perfil
punto medio en cmd
« 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.  


En línea

naidmen

Desconectado Desconectado

Mensajes: 18


Ver Perfil
Re: punto medio en cmd
« Respuesta #1 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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines