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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Invertir una palabra, ERROR
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Invertir una palabra, ERROR  (Leído 1,396 veces)
NicoSanhueza

Desconectado Desconectado

Mensajes: 9


Ver Perfil
Invertir una palabra, ERROR
« en: 22 Mayo 2018, 02:16 am »

Buenas noches a todos, espero que estén bien.

tengo un problema con el codigo. Resulta que al ingresar una palabra de 3 caracteres se invierte con exito, pero cunado ingreso una de 4 o mas caracteres esta se invierte pero arroja otros caracteres que no corresponden.

ej.    Ingrese una palabra: estadio
        Palabra invertida: oidatseuÒLHı■   èjuestadio

        se invierte la palabra(rojo), pero el resto esta de más...

Aqui les dejo el codigo

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

int main()
{
int i,k,tam=0;
char pal[20];
char inv[20];

printf("Ingrese una palabra:");
scanf("%s",pal);

for(i=0;i<21;i++)//TAMAÑO DE LA PALABRA
{
    if(pal!=0)
        tam++;
    else
        break;
}

for(k=0;k<=tam-1;k++)//INVERTIR LA PALABRA
{
    inv[k]=pal[tam-1-k];
}
printf("Palabra invertida:%s",inv);
return 0;
}


A mi juicio el for para invertir esta bien, tendra un error o es el printf del final?
Gracias de antemano


« Última modificación: 22 Mayo 2018, 02:23 am por NicoSanhueza » En línea

srWhiteSkull


Desconectado Desconectado

Mensajes: 444



Ver Perfil WWW
Re: Invertir una palabra, ERROR
« Respuesta #1 en: 22 Mayo 2018, 11:26 am »

En C/C++ normalmente el espacio que reservas, por ejemplo esos 20 caracteres, no son limpiados, es un espacio que se encuentra sucio. En lenguajes de bajo nivel es común esto y es el programador quien tiene que hacerse cargo de la completa gestión del espacio reservado.

En resumen, si está sucio, al reservar el espacio o volver a sobreescribirlo, límpialo con un bucle o alguna función, etc y lo rellenas de espacios. También otra práctica es marcar el final de la cadena con un valor cero. Por ejemplo :

Código:
...
for(k=0;k<=tam-1;k++)//INVERTIR LA PALABRA
{
    inv[k]=pal[tam-1-k];
}
inv[k+1]=0; // final de la cadena, de esa forma el printf lo lee hasta el cero (en teoría XD)
printf("Palabra invertida:%s",inv);
...

PD Por cierto acostúmbrate a usar la etiqueta correspondiente para publicar código.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con Seleccionar Palabra por Palabra
Programación Visual Basic
RickJack 6 5,391 Último mensaje 15 Septiembre 2008, 23:47 pm
por RickJack
Como hacer /una/palabra/ en vez de ?1=una&2=palabra « 1 2 3 »
PHP
dimitrix 20 9,681 Último mensaje 14 Enero 2010, 00:24 am
por dimitrix
contar caracteres de una palabra y devolver que palabra es en java
Java
Cooltan 4 23,535 Último mensaje 6 Abril 2011, 12:21 pm
por Cooltan
Duda sobre seleccionar palabra por palabra en RichTextBox (vb.net)
.NET (C#, VB.NET, ASP)
Susoch 3 6,656 Último mensaje 19 Enero 2012, 18:15 pm
por Susoch
insertar palabra por palabra a una matriz
Programación C/C++
Fabi0lo 3 3,326 Último mensaje 20 Octubre 2012, 18:17 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines