Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: estudianteuv en 23 Junio 2018, 03:21 am



Título: Ayuda con mi programa, compila pero no funciona correctamente.
Publicado por: estudianteuv en 23 Junio 2018, 03:21 am
Tengo un programa que lee una cadena, luego pide un carácter a editar y un carácter a poner. Al final se trata de mostrar la cadena y en la letra editada poner el carácter que el usuario puso, tengo esto pero no encuentro el error, ¡Gracias!

Código:
#include<stdio.h>
char *sust(char *p,char edit,char po);
int main(){
char cad[10];
char editar;
char poner;
char *r;
printf("Ingrese cadena: ");
scanf("%s",&cad);
fflush(stdin);
printf("Letra a editar: ");
scanf("%c",&editar);
fflush(stdin);
printf("Letra a poner: ");
scanf("%c",&poner);
r=sust(cad,editar,poner);
printf("Cadena editada: %s",r);
return 0;
}
char *sust(char *p,char edit,char po){
if((*p)=='\0')return p;
if((*p)==edit){
edit==po;
return sust(++p,edit,po);
}
else return p;
}


Título: Re: Ayuda con mi programa, compila pero no funciona correctamente.
Publicado por: SrMcLister en 23 Junio 2018, 19:32 pm
Hola estudianteuv.
Resulta que tu en la función recursiva le estas pasando cada vez la palabra con una letra menos, supongo que eso ya lo sabías, pero el problema reside en el return p que has puesto si (*p)!=edit (en el else).
Imagínate que yo introduzco pepe, y quiero cambiar la p por la n; el programa haría:
P==P , la cambio por n y paso a la función epe, y la p te la comes!!.. luego como es natural, E!=P por lo tanto return p y en la palabra cambiada te aparece epe.
Mi recomendación es que uses strings, son mucho mas faciles de tratar que los char.
Si no puedes, con lo que te he dicho, intenta arreglarlo.
Un Saludo!


Título: Re: Ayuda con mi programa, compila pero no funciona correctamente.
Publicado por: Xargam en 23 Junio 2018, 21:57 pm
En el scanf usaste & (ampersand) y colocaste cad , eso esta mal. El nombre de un array es puntero que apunta al primer elemento del array (es una direccion de memoria). scanf trabaja con direcciones de memoria , no necesitas anteponerle el ampersand. Eso puede generar errores graves. No te estas refiriendo a la cadena cuando antepones el ampersand.
Saludos !!! suerte!