Programación General > C/C++
Punteros
badyalberto:
--- Código: C++ --- #include <stdio.h>#include <string.h> void ordenar(int n,char cad[50][30]);void printa (int n,char cad[50][30]); int main(){ int n=0; char cad[50][30]; puts("Introdueix cadenas(. para terminar):n"); do { printf("Cadena %d: ", n+1); gets(cad[n]); fflush(stdin); }while((0!=strcmp(cad[n++],".")) || (n>50)); n--; //elimino la ultima cadena ordenar(n,cad); printa(n,cad); getchar();getchar();}void ordenar(int n,char cad[50][30]){ char *temp[30],i,elem; for(elem=0; elem<n-1; elem++){ for(i=elem+1; i<n; i++){ if(strcmp(cad[elem],cad[i])>0) { *temp=*cad[elem]; *cad[elem]=*cad[i]; *cad[i]=*temp; } } }}void printa (int n,char cad[50][30]){ int i; printf("nLes cadenes ordenades alfabeticament son:n"); for(i=0; i<n; i++){ printf("nCadena %d: %s", i+1, cad[i]); } }
Pq me intercambio la primera letra de las palabras y no la palabra entera ?
Eternal Idol:
Depuralo ...
fachamix:
--- Cita de: "badyalberto" ---
--- Código: C++ --- #include <stdio.h>#include <string.h> void ordenar(int n,char cad[50][30]);void printa (int n,char cad[50][30]); int main(){ int n=0; char cad[50][30]; puts("Introdueix cadenas(. para terminar):n"); do { printf("Cadena %d: ", n+1); gets(cad[n]); fflush(stdin); }while((0!=strcmp(cad[n++],".")) || (n>50)); //ESTA CONDICION ESTA MAL CREO n--; //elimino la ultima cadena ordenar(n,cad); printa(n,cad); getchar();getchar();}void ordenar(int n,char cad[50][30]){ char *temp[30],i,elem; /* depura esta parte del codigo seguila paso a paso y fijate el contenido de lo que te marco */ for(elem=0; elem<n-1; elem++){ for(i=elem+1; i<n; i++){ if(strcmp(cad[elem],cad[i])>0) /*evalua el contenido de esta condicion */ { *temp=*cad[elem]; /*fijate el contenido*/ *cad[elem]=*cad[i]; /*fijate el contenido*/ *cad[i]=*temp; /*fijate el contenido*/ } } }}void printa (int n,char cad[50][30]){ int i; printf("nLes cadenes ordenades alfabeticament son:n"); for(i=0; i<n; i++){ printf("nCadena %d: %s", i+1, cad[i]); } }
Pq me intercambio la primera letra de las palabras y no la palabra entera ?
--- Fin de la cita ---
badyalberto:
--- Código: C++ --- #include <stdio.h>#include <string.h> void ordenar(int n,char *cad[50]);void printa (int n,char *cad[50]); int main(){ int n=0; char taula[50][30]; char *cad[50]; puts("Introdueix cadenas(. para terminar):n"); do { printf("Cadena %d: ", n+1); gets(taula[n]); fflush(stdin); }while((0!=strcmp(taula[n++],".")) || (n>50)); n--; //elimino la ultima cadena taula[50][30]=*cad[50]; ordenar(n,cad); printa(n,cad); getchar();getchar();}void ordenar(int n,char *cad[50]){ char temp[30],i,elem; for(elem=0; elem<n-1; elem++){ for(i=elem+1; i<n; i++){ if(strcmp(cad[elem], cad[i])>0) { *temp=*cad[elem]; *cad[elem]=*cad[i]; *cad[i]=*temp; } } }}void printa (int n,char *cad[50]){ int i; printf("nLes cadenes ordenades alfabeticament son:n"); for(i=0; i<n; i++){ printf("nCadena %d: %s", i+1, cad[i]); } }
Las cabeceras estan bien ? pq cuando introduzco las palabras y pongo el . se me cierra :S
el strcpy se puede utilizar asi aunk sean punteros ?
cuando hace el cambio se tendria q hacer asi o con el strcpy ?
betopin:
Tu problema esta aca
--- Código: C ---taula[50][30]=*cad[50]; ordenar(n,cad); printa(n,cad);
En cad, previo a esas lineas no hay nada asi que la asignacion que estas haciendo almacena basura y los punteros que estas manejando en las funciones estan apuntando a arrays inexistentes
Saludos
Navegación
[#] Página Siguiente
Ir a la versión completa