Guest jorgemrt1992 Posted June 8, 2013 at 04:02 PM Report #511647 Posted June 8, 2013 at 04:02 PM Boa tarde, gostaria de pedir a vossa ajuda para encontrar o problema neste código. O código representa os corredores de um armazém, cada corredor tem armários, que tem produtos. Ao executar o programa, o output que tenho é apenas os armários e produtos do primeiro corredor. No entanto deveria ter era 4 corredores, cada um com 3 armários, cada um com x produtos. Os dados estão armazenados num ficheiro binário com inteiros. pcorredor carregaInfo(char *fileName) { FILE *f; int numCorredores, numArmarios, numProdutos; int i, j, k, aux; int idc = 1, ida = 1; pcorredor novoc, ultimoc = NULL, lista = NULL; parmario novoa, primeiroa = NULL, ultimoa = NULL; pproduto novop, primeirop = NULL, ultimop = NULL; f = fopen(fileName, "rb"); if(f == NULL) return NULL; fread(&numCorredores, sizeof(int), 1, f); fread(&numArmarios, sizeof(int), 1, f); //criar os corredores for(i = 0;i<numCorredores;i++) { novoc = (pcorredor) malloc(sizeof(corredor)); if(novoc == NULL) { fclose(f); return lista; } novoc->idCorredor = idc; idc++; novoc->prox = NULL; printf("corredor %d\n", novoc->idCorredor); //criar os armarios for(j = 0;j<numArmarios;j++) { novoa = (parmario) malloc(sizeof(armario)); if(novoa == NULL) { fclose(f); return lista; } novoa->idArmario = ida; ida++; novoa->prox = NULL; printf(" armario %d\n", novoa->idArmario); //criar produtos fread(&numProdutos, sizeof(int), 1, f); for(k = 0;k<numProdutos;k++) { novop = (pproduto) malloc(sizeof(produto)); if(novop == NULL) { fclose(f); return lista; } fread(&aux, sizeof(int),1,f); novop->idProduto = aux; fread(&aux, sizeof(int), 1, f); novop->quant = aux; novop->prox = NULL; printf(" produto %d quant %d\n", novop->idProduto, novop->quant); if(primeirop == NULL) primeirop = novop; else ultimop->prox = novop; ultimop = novop; } novoa->prod = primeirop; primeirop = NULL; if(primeiroa == NULL) primeiroa = novoa; else ultimoa->prox = novoa; ultimoa = novoa; } numArmarios = 0; novoc->arm = primeiroa; primeiroa = NULL; if(lista == NULL) lista = novoc; else ultimoc->prox = novoc; ultimoc = novoc; } fclose(f); return lista; } Obrigado
Solution KTachyon Posted June 8, 2013 at 04:31 PM Solution Report #511649 Posted June 8, 2013 at 04:31 PM Esse trabalho não é para entregar até segunda? Já devia ter sido começado há mais tempo… O teu problema é que estás a tentar fazer tanta coisa na mesma função que deixas de conseguir ler convenientemente. O truque de um bom código é cingires funcionalidade muito simples numa pequena função. Tens uma função que cria listas de produtos dentro de listas de armários dentro de listas de corredores. Não faria sentido isolares cada um destes níveis numa função? Relativamente ao teu problema - para que é que serve esta linha? numArmarios = 0; “There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.” -- Tony Hoare
Guest jorgemrt1992 Posted June 8, 2013 at 04:47 PM Report #511651 Posted June 8, 2013 at 04:47 PM (edited) A chamada de atenção para essa linha já me resolveu o problema. Como dizes, o problema acabou por ser a função gigante. O que eu queria era reiniciar a variável que atribui o id aos armários e não a variável com o numero de armários. Obrigado Edited June 8, 2013 at 04:54 PM by jorgemrt1992
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now