Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/05/2015, 10:12
jmcano
 
Fecha de Ingreso: mayo-2015
Mensajes: 1
Antigüedad: 9 años
Puntos: 0
Problema con Programa en C

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 :)

Última edición por jmcano; 10/05/2015 a las 10:25