Me piden que entregue un programa antes de las 23:00(hora española, 17:00 en este foro), de hoy y tengo varios problemas.
Supongo que para vosotros sera una tonteria, pero llevo una semana buscandole los fallos, que creo que se deben a los punteros, y no encuentro la forma de hacer que el programa funcione.
Si por favor, pueden echarle un vistazo y ver en que me estoy equivocando.
Al compilarlo, no me da ningun tipo de error. Pero al ejecutarlo, y al llegar a la parte de encolar(), a ese bucle for, el programa se cuelga, diciendome que ha dejado de funcionar, y que cierre el programa.
El programa trata sobre una cola circular. El programa lo ejecutamos con <nombredelprograma> y el nombre de 6 ficheros. A continuacion se lanza un dado, y se añaden a la cola, los primeros x ficheros(x es el numero que se saque con el dado), añadiendole a cada nombre la extension .txt . Luego se muestra en pantalla la cola, y a continuacion de desencola el primer fichero de la cola. Luego se pregunta si quiere que se repita el proceso, o si quiere terminar.
Código:
Muchas gracias por todo :) #include <stdio.h> #include <string.h> #include<stdlib.h> #include <conio.h> #define N 10+1 #define Nficheros 7 #define numcaracteresmax 12 typedef struct{ char *arraycola[N]; int inicio; int final; } tCola; void inicializarCola(tCola cola); int compColaLlena(tCola cola); int compColaVacia(tCola cola); void encolar(tCola cola,char *array[],int i); void desencolar(tCola cola); void imprimeCola(tCola cola); int main (int argc, char*argv[]){ int errorvar; int i; int v; int tamano; int tirada; int compLlena; int compVacia; int decision; tCola cola; /* Comprobacion de Errores */ errorvar=0; compLlena = 0; compVacia = 0; if (argc != Nficheros){ errorvar = 1; printf("\nError. Debe ejecutar el programa de la siguiente manera:\n<nombredelprograma> <fichero1> <fichero2> <fichero3> <fichero4> <fichero5> <fichero6>"); }else{ for(i=0; i<argc; i++){ tamano = (int)strlen(argv[i]); if(tamano > numcaracteresmax){ printf("\nError. El fichero numero %d tiene un nombre demasiado grande.\nMaximo %d caracteres.", i, numcaracteresmax); errorvar = 1; } } } /* */ if(errorvar != 1){ inicializarCola(cola); printf("\nSe procedera a tirar un dado"); printf("\nPresione una tecla..."); getch(); do{ tirada = 1+rand()%6; printf("\nLa tirada es %d", tirada); printf("\nSe procedera a encolar los primeros %d ficheros\nPulse una tecla para continuar...", tirada); getch(); for(v=0;v<tirada;v++){ if(compLlena != 1){ encolar(cola, argv, v); printf("\n Se ha encolado el fichero %s en el puesto %d",cola.arraycola[v+cola.final],v); compLlena = compColaLlena(cola); } else{ printf("\n No se ha encolado el fichero numero %d porque la cola esta llena",v); } } printf("\nFinalizado proceso de encolado..."); getch(); imprimeCola(cola); compColaVacia(cola); if(compVacia != 1){ desencolar(cola); printf("\nSe ha desencolado %s.txt",cola.arraycola[cola.inicio]); }else{ printf("\nLa cola esta vacía. No se puede desencolar."); } printf("\nPulse 0 si desea finalizar o pulse 1 si desea volver a realizar una tirada."); scanf("%d", &decision); }while(decision != 1); printf("Finalizado"); } return 0; } void inicializarCola(tCola cola){ cola.inicio = 0; cola.final = 0; } int compColaLlena(tCola cola){ int boolean; if ((cola.final+1)%N == cola.inicio){ boolean = 1; } else{ boolean = 0; } return boolean; } int compColaVacia(tCola cola){ int boolean; if (cola.inicio == cola.final){ boolean = 1; }else{ boolean = 0; } return boolean; } void encolar(tCola cola,char *array[],int i){ strcat(array[i+1], ".txt"); strcpy ( cola.arraycola[i+cola.final], array[i+1]); cola.final = (cola.final+1)%N; } void desencolar(tCola cola){ cola.inicio = (cola.inicio+1)%N; } void imprimeCola(tCola cola){ int indice; printf("\n El contenido de la cola es: "); for(indice=cola.inicio; indice != cola.final; indice=(indice+1)%N){ printf("\n %s", cola.arraycola[indice]); } }