Ir ao conteúdo

ajuda arquivo erro impressao


anapr31

Posts recomendados

Postado

oi to fazendo um programa de arquivos para cadastrar dvds ,mas quando imprime o numero de inscriçao da sempre o mesmo coloquei varios fflush(stdin) pra nao pegar buffer, mas o erro continua. alguem entendido em C

qual é o erro? segue meu codigo abaixo

agradeço desde ja

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

struct dvd{

int num[50];

int ano;

int genero;

char nome[50];

};

FILE*arquivo;

struct dvd dvd;

void cadastro();

void mostra();

int main()

{int op;

do

{

printf("1-cadastrar");

printf("\n2-mostrar");

scanf("%d",&op);

fflush(stdin);

switch(op)

{

case 1:cadastro();

break;

case 2:mostra();

break;

}

}while(op!=3);

system("pause");

return 0;

}

void cadastro()

{

int i=0;

arquivo=fopen("dvds.dat","ab+");

fseek(arquivo,sizeof(dvd),SEEK_SET);

if(arquivo==NULL)

{

printf("arquivo nao pode ser aberto");

}

else

{

printf("\n\nNumero de Inscricao:");

scanf(" %d",&dvd.num);

fflush(stdin);

printf("nome: ");

scanf("%s",dvd.nome);

fflush(stdin);

printf("genero: ");

scanf("%d",&dvd.genero);

fflush(stdin);

printf("ano: ");

scanf("%d",&dvd.ano);

fflush(stdin);

fwrite(&dvd,sizeof(dvd),1,arquivo);

}

fclose(arquivo);

}

void mostra()

{

int i=0;

arquivo= fopen("dvds.dat","rw");

if(arquivo==NULL){

printf("Erro ao abrir o arquivo");

return;

}

fread(&dvd, sizeof(dvd), 1, arquivo);

printf("\nRelacao de Clientes\n");

while(!feof(arquivo)){

i++;

printf("\n");

fflush(stdin);

printf("\nInscricao: % d \n Nome: %s\nano: %d \n ", dvd.num, dvd.nome, dvd.ano);

if(dvd.genero==1)

printf("show");

if(dvd.genero==2)

printf("aventura");

if(dvd.genero==3)

printf("comedia");

if(dvd.genero==4)

printf("infantil");

printf("\n");

fread(&dvd, sizeof(dvd), 1, arquivo);

if(feof(arquivo) || (i==20)){

break;

getchar();

getchar();

}

}

fclose(arquivo);

}

Postado

O problema tá aqui:

int num[50];

Você tá declarando um array de 50 posições, mas tá tratando essa variável como um int comum (pelo que eu deduzi aqui, acho que você pensou que declarando desse jeito você teria um número com 50 algarismos no máximo, como uma string).

É só declarar ela como um int simples.

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!