Go Back   Champions of Regnum > Español > La Taberna

La Taberna Un lugar para conversar sobre casi cualquier tema

Reply
 
Thread Tools Display Modes
Old 03-25-2013, 09:00 PM   #1
leo_rp
Pledge
 
Join Date: Apr 2007
Posts: 0
leo_rp is on a distinguished road
Default Ayuda con un programa en C :(

Buenos dias/tardes/noches dependiendo del horario en que lo lean, sabiendo de que aquí hay mucha gente que sabe mucho de programación , queria que me ayuden con un porgrama que me tiene a maltraer desde hace 2 horas que no lo puedo hacer funcionar como quiero, soy principiante en esto, asique para los mas expertos supongo que esto sera pan comido.

El enunciado es: dada una frase en una cadena, mostrar en pantalla cada palabra que la compone SIN USAR LAS FUNCIONES ESTANDAR.

Yo hice esto:

#include <stdio.h>
#define MIN 30


int valido=1;

void palabra(char[],char[]);

int main(){
char a[]={"Dada una frase en una cadena mostrar en pantalla cada palabra que la compone"};
char b[MIN];
int i;
extern int valido;

for(i=0;valido;i++){
palabra(a,b);
printf("La palabra %d es: %s\n",i+1,b);
}
}


void palabra(char a[],char b[]){
int i,j=0;
extern int valido;
static int n=0;

for(i=n;a[i]!=' ' && a[i]!='\t' && a[i]!='\n' && a[i]!=',';i++){
b[j++]=a[i];
if(a[i]=='\0'){
valido=0;
break;
}
}
n=i+1;
}


La cuestión es que me muestra cualquier cosa en pantalla y hace dos horas que lo vengo tratando de corregir y no puedo encontrar el error. Espero que me puedan ayudar.

Desde ya muchas gracias a todos.
leo_rp no ha iniciado sesión   Reply With Quote
Old 03-26-2013, 02:17 AM   #2
Comandante
Master
 
Comandante's Avatar
 
Join Date: May 2006
Location: Esperando a Caliope.
Posts: 335
Comandante is on a distinguished road
Default

El problema que estás teniendo creo que es que al crear el vector b[MIN] se esta creando con basura de la memoria por eso aparece lleno con esos símbolos raros.
Si lo creas arriba del main() solucionas eso, pero el otro problema que tendrás es que:

el vector se carga con "dada" la muestra correctamente
pero luego el vector se carga con "una" pisando las tres primeras de la anterior cargada. Por lo tanto cuando lo muestres mostrará "unaa" con doble "a" puesto que la segunda "a" queda de la palabra anterior.

Dicho de otra forma, así como está el programa, debes resetear el vector b cada vez que le cargas una nueva palabra.
__________________
---- Kitsune => Conju 60
Descubre que riqueza te rodea sin pensar un instante en su valor.
Comandante no ha iniciado sesión   Reply With Quote
Old 03-26-2013, 08:52 PM   #3
alferatz
Pledge
 
Join Date: Oct 2010
Posts: 23
alferatz is on a distinguished road
Default

2 cosas: en principio tenes q recordar de q si definís a main como int entonces estas obligado a devolver un valor entero al final. lo segundo, acostumbrate a pasar punteros en vez de arreglos. me tome la molestia de modificar tu código agregando una función propia. obvio q esta es una forma de hacerlo, no necesariamente la mejor:

Quote:
#include <stdio.h>

int main() {
char a[] = {" Dada una frase en una cadena mostrar en pantalla cada palabra que la compone "};
int i, inc;

for (i = 0; i < sizeof(a); ) {
//imprimo la palabra
inc = print_palabra(a, i);
//dejo apuntando i a la proxima palabra
i += inc;
}

return 0;
}

/**
*
* Imprime la palabra que comienza en la posición i de la cadena c
* Retorna el largo de la cadena impresa + 1
*
*/
int print_palabra(char *c, int i) {
int j, inc = 0;

//imprimo cada una de las letras de la palabra
for (j = i; c[j] != '\0' && c[j] != ' '; j++) {
printf("%c", c[j]);
inc++;
}

//si imprimimos algo agrego un salto de linea
if (i != j) {
printf("\n");
}

//retorno el largo de la cadena impresa incrementada en 1
return inc + 1;
}
__________________
"...y siempre estuve orgulloso de que no fueras un enano."
Abuelo Simpson
alferatz no ha iniciado sesión   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 03:28 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
NGD Studios 2002-2024 © All rights reserved