Programación General > C/C++

 Punteros

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa