Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: andoporto en 7 Febrero 2015, 18:04 pm



Título: Programa no cierra
Publicado por: andoporto en 7 Febrero 2015, 18:04 pm
Hola gente, el siguiente programa me funciona correctamente pero no sale, no me tira errores ni warnings, se "congela" el programa, que puede ser?

Código:
#include <stdio.h>
#include <stdlib.h>

#define esBlanco(x)((x)==' '||(x)=='\t')
#define aMayusc(x)((x)>='a'&&(x)<='z'?(x)-32:(x))
#define aMinusc(x)((x)>='A'&&(x)<='Z'?(x)+32:(x))

char* normalizar (char *);
char* normalizar2 (char *);
char* normalizar3 (char *);
char* normalizar4 (char *);

int main()
{
    char cad1[100]={"\t UN\teJEmPlo   ADeCUAdo\t  "};
char cad11[100]={"\t                UN\teJEmPlo   aDeCUAdo  "};
char cad12[100]={"\t                UN EJEMPLO   ADECUADO  "};
    char cad2[100]={"   "};
    char cad3[100]={"\tUufFFc Jf \t\t  "};
char cad31[100]={"\tUUUUUfff JfeY78u \t\t  "};
    printf("\"%s\"\n",normalizar(cad1));
printf("\"%s\"\n",normalizar(cad11));
printf("\"%s\"\n",normalizar(cad12));
    printf("\"%s\"\n",normalizar(cad2));
    printf("\"%s\"\n",normalizar(cad3));
printf("\"%s\"\n",normalizar(cad31));
printf("\n ----------------------------------------------------------------------------\n");
char cad4[100]={"\t UN\teJEmPlo   ADeCUAdo\t  "};
    char cad5[100]={"   "};
    char cad6[100]={"\tUufFFc Jf \t\t  "};
printf("\"%s\"\n",normalizar2(cad4));
    printf("\"%s\"\n",normalizar2(cad5));
    printf("\"%s\"\n",normalizar2(cad6));
    printf("\n ----------------------------------------------------------------------------\n");
    char cad7[100]={"\t UN\teJEmPlo   ADeCUAdo\t  "};
    char cad8[100]={"   "};
    char cad9[100]={"\tUufFFc Jf \t\t  "};
    printf("\"%s\"\n",normalizar3(cad7));
    printf("\"%s\"\n",normalizar3(cad8));
    printf("\"%s\"\n",normalizar3(cad9));
    printf("\n ----------------------------------------------------------------------------\n");
    char cad101[100]={"\t UN\teJEmPlo   ADeCUAdo\t  "};
    char cad111[100]={"   "};
    char cad121[100]={"\tUufFFc Jf \t\t  "};
    printf("\"%s\"\n",normalizar4(cad101));
    printf("\"%s\"\n",normalizar4(cad111));
    printf("\"%s\"\n",normalizar4(cad121));
    printf("\n");
    return 0;
}

char * normalizar (char * cad)
{
    char*pe,*pl; //puntero escritura, puntero lectura
    pe=pl=cad;
    while(*pl)
    {
        while(esBlanco(*pl)&&*pl)
            pl++;
        if(*pl)
        {
            *pe=aMayusc(*pl);
            pe++;
            pl++;
            while(*pl&&!esBlanco(*pl))
            {
                *pe=aMinusc(*pl);
                pe++;
                pl++;
            }
            if(esBlanco(*pl))
            {
                *pe=' ';
                pe++;
                pl++;
            }
        }
    }
    if(pe>cad) //eliminar el ultimo blanco, si todos fueran blancos no retrocede
         pe--;
    *pe='\0';
    return cad;
}

char * normalizar2 (char * cad)
{
    char*pe,*pl; //puntero escritura, puntero lectura
    pe=pl=cad;
    while(*pl)
    {
        while(esBlanco(*pl)&&*pl)
            pl++;
        if(*pl)
        {
            *pe=aMinusc(*pl);
            pe++;
            pl++;
            while(*pl&&!esBlanco(*pl))
            {
                *pe=aMinusc(*pl);
                pe++;
                pl++;
            }
            if(esBlanco(*pl))
            {
                *pe=' ';
                pe++;
                pl++;
            }
        }
    }
    if(pe>cad) //eliminar el ultimo blanco, si todos fueran blancos no retrocede
         pe--;
    *pe='\0';
    return cad;
}


char * normalizar3 (char * cad)
{
    char*pe,*pl; //puntero escritura, puntero lectura
    pe=pl=cad;
    while(*pl)
    {
        while(esBlanco(*pl)&&*pl)
            pl++;
        if(*pl)
        {
            *pe=aMayusc(*pl);
            pe++;
            pl++;
            while(*pl&&!esBlanco(*pl))
            {
                *pe=aMayusc(*pl);
                pe++;
                pl++;
            }
            if(esBlanco(*pl))
            {
                *pe=' ';
                pe++;
                pl++;
            }
        }
    }
    if(pe>cad) //eliminar el ultimo blanco, si todos fueran blancos no retrocede
         pe--;
    *pe='\0';
    return cad;
}

char * normalizar4 (char * cad)
{
    char*pe,*pl; //puntero escritura, puntero lectura
    pe=pl=cad;
    while(*pl)
    {
        int bande=0;
        while(esBlanco(*pl)&&*pl)
            pl++;
        if(*pl && bande==1)
        {
            *pe=aMayusc(*pl);
            pe++;
            pl++;
            while(*pl&&!esBlanco(*pl))
            {
                *pe=aMinusc(*pl);
                pe++;
                pl++;
            }
            if(esBlanco(*pl))
            {
                *pe=' ';
                pe++;
                pl++;
            }
        }
        //bande++;
    }
    if(pe>cad) //eliminar el ultimo blanco, si todos fueran blancos no retrocede
         pe--;
    *pe='\0';
    return cad;
}


Título: Re: Programa no cierra
Publicado por: engel lex en 7 Febrero 2015, 19:57 pm
ciclo infinito...
usa el debugger del ide para poder conseguirlo (o hazle un printf en las funciones a ver cual se tranca)