Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com Arquivo


leogalpao

Pergunta

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!

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...