boa tarde! preciso de uma ajuda urgente! estou desenvolvendo um programa em C# para trabalho de fim de semestre (2º semestre) e o programa está dando um erro que eu não consegui identificar... o compilador não aponta nenhum erro ou bug, mas na hora de executá-lo ele simplesmente dá um aviso que o programa parou de funcionar... segue o programa e a biblioteca: #include<stdio.h>
#include<conio.h>
#include<string.h>
#include "socio.h"
main()
{
lista_s listas = NULL;
listas = criaListaSocio();
Socio socio;
int contador = restauraListasocio(listas);
printf("%d", contador);
//preencheSocio(listas, &contador, socio);
/*socio.matricula= ++contador;
strcpy(socio.Nome_s, "João da Silva");
strcpy(socio.endereco, "Endereço 1");
socio.status=1;
insereNohsocio(listas, socio);
gravaNohsocio(socio);
imprimeListasocio(listas);*/
getch();
}
e a biblioteca:
#include<stdio.h>
typedef enum {s, n} status;
typedef enum {insere, restaura} Operacao;
typedef char nome[40];
typedef char titulo[50];
typedef struct noh_socio noh_socio;
typedef noh_socio *lista_s;
typedef noh_socio *posicao_s;
typedef struct {
int matricula;
nome Nome_s;
nome endereco;
int status;
}Socio;
struct noh_socio{
int posicao;
nome Nome_s;
noh_socio *prox;
};
lista_s criaListaSocio() {
lista_s L = (lista_s) malloc (sizeof(noh_socio));
strcpy(L->Nome_s, "");
L->posicao=0;
L->prox=NULL;
return L;
}
/*void preencheSocio(lista_s lista, int *contador,Socio socio){
socio.matricula= contador++;
fflush(stdin);
gets(socio.Nome_s);
fflush(stdin);
gets(socio.endereco);
socio.status=1;
gravaNohsocio(socio);
}*/
int existeNohsocio(lista_s lista, Socio socio) {
posicao_s p;
for (p=lista; p->prox != NULL; p = p->prox) {
if (strcmp(p->prox->Nome_s, socio.Nome_s) == 0) {
return 1;
}
}
return 0;
}
void restauraNohsocio(lista_s lista, Socio socio, Operacao operacao, int deslocamento) {
posicao_s p, q;
if (!existeNohsocio(lista, socio)) {
for (p=lista;
p->prox != NULL && strcmp(p->prox->Nome_s, socio.Nome_s) < 0;
p = p->prox);
q = p->prox;
p->prox = (noh_socio *) malloc(sizeof(noh_socio));
strcpy(p->prox->Nome_s,socio.Nome_s);
if (operacao == insere)
p->prox->posicao = gravaNohsocio(socio);
else
p->prox->posicao = deslocamento;
p->prox->prox = q;
} else {
printf("\n O Socio %s j%s existe na base de dados!!!", socio.Nome_s,160);
}
}
void insereNohsocio(lista_s lista, Socio socio) {
restauraNohsocio(lista, socio, insere, 0);
}
int gravaNohsocio(Socio socio) {
FILE *arq = fopen("socios.dat","ab");
int tamanho=0;
if (arq != NULL) {
fseek(arq, 0, 2);
tamanho = ftell(arq);
fwrite(&socio, sizeof(Socio), 1, arq);
fclose(arq);
}
return tamanho;
}
int restauraListasocio(lista_s l) {
FILE *arq = fopen("socios.dat","rb");
Socio socio;
int tamanho=0;
int contador=1;
if (arq != NULL) {
do {
fread(&socio, sizeof(Socio), 1, arq);
if (ferror(arq)) {
printf("\nOcorreu um erro na leitura.");
break;
}
if (!feof(arq))
restauraNohsocio(l, socio, restaura, tamanho);
tamanho += sizeof(Socio);
contador++;
} while (!feof(arq));
fclose(arq);
} else {
printf("\nErro na abertura do arquivo.");
}
return contador;
}
Socio obtemRegistrosocio(int deslocamento) {
FILE *arq = fopen("socios.dat","rb");
Socio socio;
if (arq != NULL) {
fseek(arq, deslocamento, 1);
fread(&socio, sizeof(Socio), 1, arq);
fclose(arq);
}
return socio;
}
void atualizaRegistrosocio(lista_s lista, Socio socio) {
Socio socioTmp;
posicao_s p;
for (p=lista; p->prox != NULL; p = p->prox) {
if (strcmp(p->prox->Nome_s, socio.Nome_s) == 0) {
socioTmp = obtemRegistrosocio(p->prox->posicao);
strcpy(socioTmp.endereco, socio.endereco);
FILE *arq = fopen("socios.dat","rb+");
if (arq != NULL) {
fseek(arq, p->prox->posicao, 1);
fwrite(&socioTmp, sizeof(Socio), 1, arq);
fclose(arq);
}
break;
}
}
}
void imprimeListasocio(lista_s lista) {
posicao_s p;
printf("\n");
int ctr=1;
p=lista;
Socio socio;
printf("\n\nEndereco de L: %d - endereco do no-lider: %d ", &lista, lista);
printf("\nno-lider (endereco: %d - proximo: %d", &p->Nome_s, p->prox);
for (; p->prox != NULL; p = p->prox) {
socio = obtemRegistrosocio(p->prox->posicao);
printf("\n%d Nome(endereco do noh: %d - matricula: %d - nome: %s - endereco: %s - proximo: %d",
ctr++,&p->prox->Nome_s, socio.matricula,
socio.Nome_s, socio.endereco, p->prox->prox);
}
printf("\n\n");
} se alguém puder ajudar, estou on line meu email é leogalpao@hotmail.com aguardo!