Jump to content
Fórum Script Brasil
  • 0

Problema com Arquivo


leogalpao

Question

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!

Edited by kuroi
Adicionar tag CODE
Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...