C错误,需要帮助

我有这个最后的工作项目,我过去几天一直在做,我吓坏了,因为截止日期在这里,我无法找到我的代码有什么问题,我做的一切给了我“分段错误”错误,但是当我编译它不会给我任何错误。 这是以下代码的链接: http : //pastebin.com/tqWc6Dd0这里是代码本身:(但我建议使用链接,忽略评论,葡萄牙语乱码)。

#include #include typedef struct{ char nomenavio; int codigonavio; char tiponavio; int tonelagemnavio; int anonavio; char paisnavio; char armadornavio; }NAVIO; typedef struct{ int numportos; int milhas; int tonelagemtotal; int consumototal; }TOTAL; ///////////////////////////////////////////////////////////&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCOES DE MENUS///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int menuprincipal(){ int controlo=0; printf("\n Ola, escolha a opcao desejada:\n\t1-ADICIONAR NOVO NAVIO\n\t2-CARREGAR FICHEIROS\n\t3-LISTAR\n"); scanf("%d", &controlo); return(controlo); } int menulista(){ int controlomenu; printf("\n LISTAGEM DOS NAVIOS!\n Escolha a opcao que pretende\n \t1-LISTAGEM TOTAL DOS NAVIOS\n\t2-LISTAGEM DOS NAVIOS A PARTIR DE UMA CHAVE\n\t3-LISTAGEM A PARTIR DE UM NOME\n"); scanf("%d", &controlomenu); return(controlomenu); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCOES DE LISTAGEM DOS NAVIOS///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void listarnavios(FILE*lista, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, &lstNavio->armadornavio); printf("%c %d %c %d %d %c %c\n", lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); }while(!feof(lista)); } void anonavios(FILE*lista, int criterio, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, lstNavio->armadornavio); if(criterio==lstNavio->anonavio){ printf("%c %d %c %d %d %c %c", lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); } }while(!feof(lista)); } void armadornavios(FILE*lista, char criterio, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, lstNavio->armadornavio); if(criterio==lstNavio->armadornavio){ printf("%c %d %c %d %d %c %c", lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); } }while(!feof(lista)); } void tonelagemnavios(FILE*lista, int criterio, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, &lstNavio->armadornavio); if(criterio>=lstNavio->tonelagemnavio){ printf("%c %d %c %d %d %c %c", lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); } }while(!feof(lista)); } void tiponavios(FILE*lista, char criterio, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, &lstNavio->armadornavio); if(criterio==lstNavio->tiponavio){ printf("%c %d %c %d %d %c %c",lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio,lstNavio->anonavio, lstNavio->armadornavio); } }while(!feof(lista)); } void nomepornavio(FILE*lista, char nomedonavio, NAVIO*lstNavio){ do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, lstNavio->armadornavio); if(nomedonavio==lstNavio->nomenavio){ printf("%c %d %c %d %d %c %c", lstNavio->nomenavio, lstNavio->codigonavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); } }while(!feof(lista)); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCOES DE ADICIONAR REGISTOS////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void adicionareg(FILE *lista, FILE *total, NAVIO *lstNavio, TOTAL *lstTotal){ printf("\ne depois vim aqui parar!"); int tempor; tempor=0; do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, &lstNavio->armadornavio); if(temporcodigonavio){ tempor=lstNavio->codigonavio; } }while(!feof(lista)); tempor++; printf("\nAdicionar registo do navio:"); printf("\nInsira o nome do navio"); scanf("%c",lstNavio->nomenavio); printf("\nInsira o tipo do navio"); scanf("%c",lstNavio->tiponavio); printf("\nInsira a tonelagem do navio"); scanf("%d",&lstNavio->tonelagemnavio); printf("\nInsira o ano do navio"); scanf("%d",&lstNavio->anonavio); printf("\nInsira o armador"); scanf("%c",lstNavio->armadornavio); printf("\nO novo navio vai ter o codigo %d", tempor); fprintf(lista,"\n%c %d %c %d %d %c %c", lstNavio->nomenavio, tempor, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); lstTotal->numportos=0; lstTotal->milhas=0; lstTotal->tonelagemtotal=0; lstTotal->consumototal=0; fprintf(total, "\n%d %d %d %d %d", tempor, lstTotal->numportos, lstTotal->milhas, lstTotal->tonelagemtotal, lstTotal->consumototal); } void carregarnovos(FILE*lista, FILE*total, FILE*novalista, NAVIO*lstNavio, TOTAL*lstTotal){ int tempor; tempor=0; do{ fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio->codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, lstNavio->armadornavio); if(temporcodigonavio){ tempor=lstNavio->codigonavio; } }while(!feof(lista)); tempor++; lstTotal->numportos=0; lstTotal->milhas=0; lstTotal->tonelagemtotal=0; lstTotal->consumototal=0; do{ fscanf(novalista,"%c %c %d %d %c %c\n",lstNavio->nomenavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, lstNavio->armadornavio); fprintf(lista, "\n%c %d %c %d %d %c %c", lstNavio->nomenavio, lstNavio->tiponavio, lstNavio->tonelagemnavio, lstNavio->anonavio, lstNavio->armadornavio); fprintf(total, "\n%d %d %d %d %d", tempor, lstTotal->numportos, lstTotal->milhas, lstTotal->tonelagemtotal, lstTotal->consumototal); tempor++; }while(!feof(novalista)); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //FUNCAO MAIN///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// main(){ NAVIO *lstNavio[1]; TOTAL *lstTotal[1]; FILE *lista; FILE *novalista; FILE *total; int ctrlmenuprincipal, ctrlmenulista; int ctrlchave; char criteriochar[20], nomedonavio[30]; int criterioint; char nomenovalista[30]; ctrlmenuprincipal=menuprincipal(); ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //OPCAO 1 do menu principal, permite ao utilizador inserir um novo registo na lista principal.//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(ctrlmenuprincipal==1){ lista=fopen("navios.txt", "a+"); if(lista==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } total=fopen("naviosRef.txt", "a"); if(total==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } adicionareg(lista, total, *lstNavio, *lstTotal); fclose(lista); fclose(total); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //OPCAO 2 do menu principal, adicionar a lista principal, os registos que estao na lista novosNavios.txt".//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(ctrlmenuprincipal==2){ printf("\nInsira o nome da lista com os novos navios:"); scanf("%c", nomenovalista); lista=fopen("navios.txt", "a+"); if(lista==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } total=fopen("naviosRef.txt", "a"); if(total==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } novalista=fopen("novosNavios.txt", "r+"); if(novalista==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } carregarnovos(lista, total, novalista, *lstNavio, *lstTotal); fclose(lista); fclose(total); fclose(novalista); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //OPCAO 3 do menu principal, listagem de navios, inicia outro menu, que permite ao utilizador escolher o tipo de listagem desejada.//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if(ctrlmenuprincipal==3){ ctrlmenulista=menulista(); lista=fopen("navios.txt", "r+"); if(lista==NULL){ printf("Erro na abertura do ficheiro"); exit(1); } printf("sera que chego aqui?"); if(ctrlmenulista==1){ printf("bugabuga"); listarnavios(lista, *lstNavio); } if(ctrlmenulista==2){ printf("\nInsira a chave desejada\n\t1-Armador\n\t2-Ano\n\t3-Tipo\n\t4-Tonelagem\n"); scanf("%d", &ctrlchave); printf("%d", ctrlchave); if(ctrlchave==1){ printf("\nInsira o nome do Armador:");scanf("%c\n",criteriochar); armadornavios(lista, *criteriochar, *lstNavio); } if(ctrlchave==2){ printf("\nInsira o Ano:");scanf("%d\n",criterioint); anonavios(lista, criterioint, *lstNavio); } if(ctrlchave==3){ printf("\nInsira o tipo da embarcação:");scanf("%c\n",criteriochar); tiponavios(lista, *criteriochar, *lstNavio); } if(ctrlchave==4){ printf("\nInsira a tonelagem:");scanf("%d\n",criterioint); tonelagemnavios(lista, criterioint, *lstNavio); } } if(ctrlmenulista==3){ printf("\nInsira o nome do navio:"); scanf("%c\n", nomedonavio); nomepornavio(lista, *nomedonavio, *lstNavio); } fclose(lista); } } 

谢谢你的时间。

检查fscanf调用。 有时你不应该在你应该去的地址。

例如,在listarnavios

 fscanf(lista,"%c %d %c %d %d %c %c\n", lstNavio->nomenavio, &lstNavio-codigonavio, lstNavio->tiponavio, &lstNavio->tonelagemnavio, &lstNavio->anonavio, &lstNavio-armadornavio); 

它有lstNavio->nomenavio而不是&lstNavio->nomenavio ,而且这不是唯一的。