Buenas tardes, estoy en primero de carrera y estoy empezando con este lenguaje (C).
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:
#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]);
}
}
Muchas gracias por todo :)