Ir ao conteúdo

Gravar arquivo em binário usando Lista Encadeada


inf-paulo

Posts recomendados

Postado

Galera, gostaria de saber porque esta dando erro na hora de ler ou gravar o arquivo...

Já fiz o mesmo processo sem usar lista encadeada e esta normal...

Entretanto esta dando erro usando essa lista.

[COD]Name: C_estoque

Copyright: FTC

Author: Paulo Jardim

Date: 20/05/11 13:56

Description:

Trabalho 2 Semestre Turma de Sistema de informação FTC 2011

Professor Alex.

Assunto : Controle de Estoque

*/

#include <stdio.h>

#include <stdlib.h>

struct estoque

{

char nome[80];

int qtd;

float valor;

struct estoque *ptrprox;

};

typedef struct estoque S_estoque;

S_estoque *ptrprim, *ptrnovo, *ptrultimo;

FILE *arquivo;

void menu();

void cadastro();

void listar();

void salvar();

void abrir();

int main()

{

menu();

system("PAUSE");

return 0;

}

void menu()

{

int op=0;

system("CLS");

printf("Digite a opcao desejada\n\n\n");

printf("1 - Cadastrar novo produto\n");

printf("2 - Listar produtos\n");

printf("3 - Salvar No arquivo\n");

printf("4 - Abrir arquivo\n");

scanf("%d", &op);

switch (op)

{

case 1: cadastro(); break;

case 2: listar(); break;

case 3: salvar();

case 4: abrir();

default : menu();

}

}

void cadastro()

{

int op = 1;

while (op == 1)

{

ptrnovo = (S_estoque *)malloc (sizeof( S_estoque ));

printf("Digite o nome do produto ->");

fflush(stdin);

scanf("%s", ptrnovo->nome);

printf("Digite Quantidade ->");

fflush(stdin);

scanf("%d", &ptrnovo->qtd);

printf("digite o valor ->");

fflush(stdin);

scanf("%f", &ptrnovo->valor);

ptrnovo->ptrprox = NULL;

if (ptrprim == NULL)

ptrprim = ptrnovo;

else

ptrultimo->ptrprox = ptrnovo;

ptrultimo = ptrnovo;

printf("Deseja cadastrar outro produto? 1 para sim e qualquer outra tecla para nao");

scanf("%d", &op);

}

menu();

}

void listar()

{

S_estoque *ptr;

if (ptrprim == NULL)

{

printf("Lista esta vazia");

system("PAUSE");

menu();

}

ptr = ptrprim;

do{

printf("nome = %s\nidade = %d\nvalor = %f\n\n", ptr->nome, ptr->qtd, ptr->valor);

ptr = ptr->ptrprox;

}while (ptr != NULL);

printf("\nFim da lista");

system("PAUSE");

menu();

}

void salvar()

{

S_estoque *ptr;

ptr = ptrprim;

int i;

if ((arquivo = fopen("arquivo.date","wb")) == NULL )

{

printf("O arquivo nao pode ser aberto.\n\n");

return;

}

while (ptr != NULL)

{

fwrite(ptr, sizeof( S_estoque )-(sizeof(int)), 1, arquivo);

ptr = ptr->ptrprox;

}

printf("Dados Gravados com sucesso\n\n\n");

fclose(arquivo);

system("PAUSE");

menu();

}

void abrir()

{

S_estoque *ptr;

int i;

if ((arquivo = fopen("arquivo.date","rb")) == NULL )

{

printf("O arquivo nao pode ser aberto.\n\n");

return;

}

while (!feof(arquivo))

{

ptr = (S_estoque *)malloc (sizeof( S_estoque )-(sizeof(int)));

fread(ptr, sizeof( S_estoque )-(sizeof(int)), 1, arquivo);

{

printf("\nNome do produto : %s", ptr->nome);

printf("\nQuantidade : %d" , ptr->qtd);

printf("\nValor do produto : %.2f", ptr->valor);

}

}

printf("\n\n\t\tFIM DA LISTA\n\n\n");

system("PAUSE");

fclose(arquivo);

menu();

}

  • 7 meses depois...
Postado

è uma sugestao e também uma ajudinhapra mim que estou começando agora

adicionar um função para alterar algum produto, ou preço.

Eu estou fazendo um programa parecido com o seu. Estou querendo saber como ficaria essa função. Obrigado :)

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!