punto medio en cmd

Iniciado por 7emiliosk8, 12 Febrero 2017, 03:38 AM

0 Miembros y 1 Visitante están viendo este tema.

7emiliosk8

Hola en el siguiente codigo, alguien me podria explicar estas lineas

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

Citarprintf("%*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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ANCHO_MAX 80
#define PTO_MEDIO(s) (40 - strlen((s))/2 )

int main(int argc,char* argv[])
{
    char texto[79]; /*78 caracteres + '\0'*/
    int i,j;

    do{
        printf("Introduce un texto: ");
        fflush(stdin);
        fgets(texto,79,stdin);
        if(strlen(texto)==78)
        {
            if(texto[77]=='\n')
                texto[77]='\0';
        }
        else
            texto[strlen(texto)-1]='\0';
    }while(strlen(texto)==0);

    printf("\n");

    /*

    Ponemos 5 filas y strlen(texto) + 2 columnas

    Esto se puede cambiar introduciendo variables para crear un tabla con otras dimensiones

    */

    for(i=0;i<5;i++)
    {
        if(strlen(texto)<77)
            printf("%*s",PTO_MEDIO(texto) - 1," ");

        if(i==0 || i==4)
            for(j=0;j< strlen(texto) + 2;j++)
                printf("*");
        else if(i==2)
        {
            printf("*%s*",texto);
        }
        else
        {
            printf("*%*s*",strlen(texto)," ");
        }

        if(strlen(texto)<78)
            printf("\n");
        /*else se llega al final de la linea y automaticamente el cursor pasa a estar en la
        primera posicion de la siguiente linea*/
    }

    printf("\n");
    system("PAUSE");

    return 0;
}

naidmen

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.