Título: duda ejercicio de c (fallo al apilar) Publicado por: baisa en 5 Abril 2011, 14:23 pm Hola;
yo queria saber el error que tengo en el código ya que lo he mirado varias veces y nose cual es. El fallo está al apilar los datos en la pila y al desapilarlos. Gracias. Si me pudieran contestar lo antes posible se lo agradeceria. //LIBRERIAS UTILIZADAS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 5 //DEFINICION DE ESTRUCTURA A UTILIZAR struct info { char cadena[20]; float numero; struct info *siguiente; }; //FUNCIÓN DE APILAR LOS DATOS int apilar(struct info *pila1,struct info *paux, int num) { if(num==(TAM)) return(num); else { pila1[num].numero=paux->numero; strcpy(pila1[num].cadena,paux->cadena); num++; return 0; } } //FUNCIÓN DE DESAPILAR DATOS int desapilar(struct info *pila1, struct info *paux, int num) { int i; if(num==-1) return (num); else { paux->numero=pila1[0].numero; strcpy(paux->cadena,pila1[0].cadena); for(i=0;i<num;i++) { pila1.numero=pila1[i+1].numero; strcpy(pila1.cadena,pila1[i+1].cadena); } return 0; } } //FUNCIÓN PRINCIPAL int main(void) { struct info pila1[TAM],aux; int res, opcion=0, num=0,i; while(opcion!=5) { printf("\nElija una opcion: \n1)Apilar \n2)Desapilar \n3)Resetear \n4) Listar \n5)Salir\n"); scanf("%d",&opcion); switch(opcion) { case 1: { printf("\nIntroduce una cadena: "); scanf("%s",aux.cadena); printf("\nIntroduce un numero: "); scanf("%f",&aux.numero); res = apilar(&pila1[num],&aux,num); if (res ==TAM) { printf("\nLa pila esta llena"); break; } else { printf("\nLos datos introducidos son: %s, %f.",pila1[num].cadena,pila1[num].numero); num++; break; } } case 2: res = desapilar(&pila1[num], &aux,num); if (res < 0) { printf("\nLa pila esta vacia"); break; } else { printf("\nLos datos extraidos son: %s, %f.",aux.cadena,aux.numero); num--; break; } case 3: { printf("\nLa pila se ha vaciado."); num=-1; break; } case 5: { printf("\nFin de la aplicacion "); break; } case 4: { printf("\nLos datos en estos momentos son: \n"); for(i=0;i<num;i++) { printf("\n \nDato %d de la pila",i+1); printf("\n %s", pila1.cadena); printf("\n %f",pila1.numero); } break; } default: { printf("\n Opcion erronea."); break; } } //Fin del switch } //Fin del while getchar(); getchar(); return 0; } //FIN DEL CÓDIGO Título: Re: duda ejercicio de c (fallo al apilar) Publicado por: ssaammuu en 5 Abril 2011, 22:32 pm //LIBRERIAS UTILIZADAS #include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 5 //DEFINICION DE ESTRUCTURA A UTILIZAR struct info { char cadena[20]; float numero; struct info *siguiente; }; //FUNCIÓN DE APILAR LOS DATOS int apilar(struct info *pila1,struct info *paux, int num) { if(num==(TAM)) return(num); else { pila1[num].numero=paux->numero; strcpy(pila1[num].cadena,paux->cadena); num++; return 0; } } //FUNCIÓN DE DESAPILAR DATOS int desapilar(struct info *pila1, struct info *paux, int num) { int i; if(num==-1) return (num); else { paux->numero=pila1[0].numero; strcpy(paux->cadena,pila1[0].cadena); for(i=0;i<num;i++) { pila1.numero=pila1[i+1].numero; strcpy(pila1.cadena,pila1[i+1].cadena); } return 0; } } //FUNCIÓN PRINCIPAL int main(void) { struct info pila1[TAM],aux; int res, opcion=0, num=0,i; while(opcion!=5) { printf("\nElija una opcion: \n1)Apilar \n2)Desapilar \n3)Resetear \n4) Listar \n5)Salir\n"); scanf("%d",&opcion); switch(opcion) { case 1: { printf("\nIntroduce una cadena: "); scanf("%s",aux.cadena); printf("\nIntroduce un numero: "); scanf("%f",&aux.numero); res = apilar(&pila1[num],&aux,num); if (res ==TAM) { printf("\nLa pila esta llena"); break; } else { printf("\nLos datos introducidos son: %s, %f.",pila1[num].cadena,pila1[num].numero); num++; break; } } case 2: res = desapilar(&pila1[num], &aux,num); if (res < 0) { printf("\nLa pila esta vacia"); break; } else { printf("\nLos datos extraidos son: %s, %f.",aux.cadena,aux.numero); num--; break; } case 3: { printf("\nLa pila se ha vaciado."); num=-1; break; } case 5: { printf("\nFin de la aplicacion "); break; } case 4: { printf("\nLos datos en estos momentos son: \n"); for(i=0;i<num;i++) { printf("\n \nDato %d de la pila",i+1); printf("\n %s", pila1.cadena); printf("\n %f",pila1.numero); } break; } default: { printf("\n Opcion erronea."); break; } } //Fin del switch } //Fin del while getchar(); getchar(); return 0; } //FIN DEL CÓDIGO En las dos primeras lineas en rojo, estas intentado asignar un objeto del array pila1[TAM] al array entero por lo que da error seguramente algo de relacionado con signar un valor info a un info*. Creo que alomejor se te a olvidado el [ i], es decir: Código: pila1[i].numero=pila1[i+1].numero; Las otras dos lineas son otro despiste se te ha olvidado otra vez el [ i]: Código: printf("\n %s", pila1[i].cadena); |