Título: Problema con punteros Publicado por: NEGRO_PABLO en 29 Noviembre 2012, 05:09 am Hola a todos estoy aprendiendo a programar en c y tengo un problema q no puedo solucionar ni buscandolo en internet ... El problema es en la parte de la ordenacion de una lista aqui les dejo el codigo, desde ya muchas graciasss!!!
/****************************************** * * * Autor : Singh Pablo Roberto Manuel * * Ejercicio nro 10 * * * ******************************************/ #include <stdio.h> #include <stdlib.h> #include <conio.h> #define V 1 #define F 0 #define M 20 struct tauto { int codigo; char marca[M]; char modelo[M]; char color[M]; struct tauto *sig; }; typedef struct tauto coche; //Prototipos.- void menu(); void agregar (coche ** , int *); void borrar (coche ** , int *); void buscar (coche ** , int *); void ordenar (coche ** , int *); void mostrar (coche ** , int *); void copiar (coche ** , coche ** ); int main() { int ind=0,*indx; //Indice de cantidad de elementos en la lista indx=&ind; char opcion='z'; //Opcion para el menu coche *cabeza; cabeza=NULL; //======== Bucle Menu ========// for ( ; opcion!='s' && opcion!='S' ; ) { menu(); fflush(stdin); printf("%c\n",opcion=getch()); switch (opcion) { case '1': agregar(&cabeza,indx); break; case '2': borrar(&cabeza,indx); break; case '3': buscar(&cabeza,indx); break; case '4': ordenar(&cabeza,indx); break; case '5': mostrar(&cabeza,indx); break; case 'S':; case 's': printf("\nCerrando programa...\n"); break; default: printf("\nIngrese una opcion valida...\n\n"); system("pause"); break; } } //======== Fin Bucle Menu ========// system("pause"); return 0; } void agregar( coche **cabeza, int *indx) { coche *p; p=NULL; if ( (*cabeza)==NULL ) { printf("Lista vacia.-\n"); p=(coche *)malloc(sizeof(coche)); printf("\nAuto nro %i : ",*indx+1); printf("\n\tCodigo : "); scanf("%i",&p->codigo); printf("\tMarca : "); scanf("%s",p->marca); printf("\tModelo : "); scanf("%s",p->modelo); printf("\tColor : "); scanf("%s",p->color); p->sig=NULL; (*cabeza)=p; } else { p=(coche *)malloc(sizeof(coche)); printf("\nAuto nro %i : ",*indx+1); printf("\n\tCodigo : "); scanf("%i",&p->codigo); printf("\tMarca : "); scanf("%s",p->marca); printf("\tModelo : "); scanf("%s",p->modelo); printf("\tColor : "); scanf("%s",p->color); p->sig=(*cabeza); (*cabeza)=p; } (*indx)=(*indx+1); printf("\n"); system("pause"); } void borrar ( coche **cabeza,int *indx ) { int i,codigo=0,flag=F; coche *p,*anterior=NULL; p=(*cabeza); printf("\nIngrese el codigo del auto a borrar : "); scanf("%i",&codigo); for (i=0;i<(*indx);i++) { if ( anterior==NULL ) { if ( p->codigo==codigo ) { (*cabeza)=p->sig; free(p); //p=cabeza; (*indx)=(*indx-1); flag=V; printf("\nSe borro con exito! .- \n"); break; }else { anterior=p; p=p->sig; } } else { if ( p->codigo==codigo ) { anterior->sig=p->sig; free(p); (*indx)=(*indx-1); flag=V; printf("\nSe borro con exito! .- \n"); break; }else { anterior=p; p=p->sig; } } } if ( flag == F ) printf("\nNo se encontro el auto.- \n"); printf("\n"); system("pause"); } void buscar ( coche **cabeza,int *indx ) { int i,flag=F; char mod[M]; coche *p; p=(*cabeza); printf("\nIngrese el modelo a buscar : "); scanf("%s",&mod); printf("Auto : "); for ( i=0;i<(*indx);i++ ) { if ( strcmp(p->modelo,mod)==0 ) { printf("\n\tCodigo : %i",p->codigo); printf("\n\tMarca : %s",p->marca); printf("\n\tModelo : %s",p->modelo); printf("\n\tColor : %s\n\n",p->color); flag=V; break; }else p=p->sig; } if ( flag == F ) printf("\n\tNo encontrado.-\n"); printf("\n"); system("pause"); } void mostrar( coche **cabeza,int *indx) { int i; coche *p; p=(*cabeza); printf("\n======Mostrando======\n"); printf("\nElementos en la lista : %i \n",*indx); for (i=0;i<(*indx);i++) { printf("\nAuto nro %i : ",i+1); printf("\n\tCodigo : %i",p->codigo); printf("\n\tMarca : %s",p->marca); printf("\n\tModelo : %s",p->modelo); printf("\n\tColor : %s\n\n",p->color); p=p->sig; } printf("\n"); system("pause"); } void copiar (coche **d, coche **f) { coche *temp,*dest,*fuent; dest=(*d); fuent=(*f); temp->codigo=dest->codigo; strcpy ( temp->marca,dest->marca ); strcpy ( temp->modelo,dest->modelo ); strcpy ( temp->color,dest->color ); dest->codigo=fuent->codigo; strcpy ( dest->marca,fuent->marca ); strcpy ( dest->modelo,fuent->modelo ); strcpy ( dest->color,fuent->color ); fuent->codigo=temp->codigo; strcpy ( fuent->marca,temp->marca ); strcpy ( fuent->modelo,temp->modelo ); strcpy ( fuent->color,temp->color ); } void ordenar( coche **cabeza,int *indx ) { int i,j; coche *p,*aux; p=(*cabeza); printf("\nElementos en la lista : %i \n",*indx); for (i=0;i<(*indx)-1;i++) { aux=p; for (j=i+1;j<(*indx);j++) { printf("\n[%i][%i]",i,j); aux=aux->sig; if (strcmp(p->marca,aux->marca)>0) { printf("\ncambio"); copiar(&p,&aux); } } p=p->sig; } printf("\nLista Ordenanda .-\n"); system("pause"); } void menu() { system("cls"); printf("\n==============MENU=============="); printf("\n1)Agregar"); printf("\n2)Borrar"); printf("\n3)Buscar"); printf("\n4)Ordenar"); printf("\n5)Mostrar"); printf("\nS)Salir.-"); printf("\n\n\t\tOpcion : "); } Título: Re: Problema con punteros Publicado por: x64core en 29 Noviembre 2012, 06:55 am Ordena el codigo y se más especifico con tu problema, pon el codigo con Geshi:
Código
escribe detalles, linea del error, y depura el codigo. Título: Re: Problema con punteros Publicado por: durasno en 29 Noviembre 2012, 15:41 pm Hola! nose con que estas compilando pero seguro te mostro bastantes warning, deberias prestarle atencion ya que te puede ayudar a encontrar el error... ayuda: mira en la funcion copiar() cual es el problema con temp
Saludos Título: Re: Problema con punteros Publicado por: twins en 30 Noviembre 2012, 18:41 pm El problema no es nada grave, primero para leer una cadena de caracteres no necesitas el & y lo otro para usar la funcion strcpy necesitas incluir la libreria string.h saludos
|