Que relajo.
Incluso es difícil seguir el código. Antes de poder llegar a la solucion de tu duda hay que limpiar el código:
Primero, realmente no necesitas la variable cont. Ya tienes i:
Código C++:
Ver originalfor (i = 0; pepe != 5; i++)
{
if (cadena[i] == NULL)
{
for (x = i; x != 0; x--, i++)
{
cadena[i] = cadena[x - 1];
pepe = 5;
}
}
}
Si te das cuenta, no necesitas 2 fors anidados. Puedes sacar el interior y todo se simplifica. Ya no necesitas a pepe:
Código C++:
Ver originalprintf("Introduce una palabra: ");
for (i = 0; ; i++)
{
if (cadena[i] == NULL)
{
break;
}
}
for (x = i; x != 0; x--, i++)
{
cadena[i] = cadena[x - 1];
}
Ya se ve mucho mas simple no?
Aun se puede simplificar mas. Podemos unir el if con el for:
Código C++:
Ver originalfor (i = 0; cadena[i] != 0; i++)
{
}
Y como veo que ya incluyes string.h, entonces puedes puedes sustituir por:
Ahora, en el segundo for: Tienes un pequeño detalle:
Código C++:
Ver originalfor (x = i; x != 0; x--, i++)
{
cadena[i] = cadena[x - 1];
}
La posición 0 también se debe incluir por lo que mejor usa:
Código C++:
Ver originalfor (x = i; x >=0; x--, i++)
{
cadena[i] = cadena[x - 1];
}
Finalmente, para que no te salga basura, debes inicializar tu arreglo char con todos sus elementos a 0. Porque printf va a leer el arreglo hasta encontrar un 0. Entonces si no lo encuentra, se sigue y te imprime otras cosas.
Aun no es un código limpio y legible, pero esta mucho mejor que como estaba. No crees?.
El punto es que no necesitabas fors anidados.
Saludos