Ir ao conteúdo

Posts recomendados

Postado

Estou Montado uma struct é está com esse erro, erro undefined reference to "fwirite" alguem poderia me dar uma solução, obrigado desde já!!

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

#define ARQ "Dados.Dat"

#define OP_INSERIR   '1'
#define OP_ALTERAR   '2'
#define OP_APAGAR    '3'
#define OP_LISTAR    '4'
#define OP_PESQUISAR '5'

#define OP_SAIR      '0'

#define OP_PESQ_IDADE '1'
#define OP_PESQ_NOME  '2'

char *MainMenu[]={
    "1. Inserir Registro",
    "2. Alterar Registro",
    "3. Apagar Registro",
    "4. Listar Registro",
    "5. Pesquisar",
    "0. Sair",
    NULL
};

char *PesqMenu[]={
    "1. Pesquisar por Intervalo de Idades",
    "2. Pesquisar por Nome",
    "0. Voltar",
    NULL

};

FILE *fp;

typedef struct
{
    char Nome [30+1];
    int Idade;
    float Salario;
    char Status;
} PESSOA;

void Mensagem (char *msg);

void Ler_Pessoa(PESSOA *p)
{
    printf("Nome   : "); gets(p->Nome);
    printf("Idade   : "); scanf("%d",&p->Idade);
    printf("Salario   : "); scanf("%f",&p->Salario);
    p->Status=' ';
    fflush(stdin);
}

void Mostrar_Pessoa(PESSOA p)
{
    printf("%-30s  %3d  %10.2f\n",p.Nome,p.Idade,p.Salario);
}

void Adicionar_Pessoa (PESSOA p)
{
    fseek(fp, 0L, SEEK_END);
    if (fwrite(&p,sizeof(p),1,fp)!=1)
        Mensagem("Adicionar Pessoa: Falhou a escrita do Registro");
}

void Mensagem(char *msg)
{
    printf(msg);
    getchar();
}

void Inic ()
{
   fp=fopen(ARQ,"r+b");
   if (fp==NULL)
   {
    fp =fopen(ARQ,"w+b");
    if (fp==NULL)
    {
        fprintf(stderr,"ERRO FATAL: Impossivel Criar Arquivo de Dados\n");
        exit(1);
    }
   }
}

char Menu(char *opções[])
{ int i;
  char ch;

  while (1)
  {
   printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
   for (i=0; opções!=NULL; i++)
        printf("\t\t%s\n\n",opções);

        printf("\n\n\t\topção: ");
        ch = getchar(); fflush(stdin);
        for (i=0; opções!=NULL; i++)
            if (opções[0]==ch)
            return ch;
  }

}

void Inserir_Pessoa()
{ PESSOA x;
  Ler_Pessoa(&x);
  Adicionar_Pessoa(x);

}

void Alterar_pessoa()
{PESSOA x;
 long int n_reg;
 printf("qual o N° do registro: ");
 scanf("%ld", & n_reg); fflush(stdin);
 if (fseek(fp,(n_reg-1)*sizeof(PESSOA),SEEK_SET)!=0)
 {
     Mensagem("Registro Inexistente ou Problemas no Posicionamento!!!");
     return;
 }
 if (fread(&x,sizeof(PESSOA),1,fp)!=1)
{
    Mensagem("Problema na Leitura do Registro!!!");
    return;
}
if (x.Status=='*')
{
    Mensagem("Um Registro Apagado não pode ser alterado!!!\n\n");
    return;
}

printf("\n\nDados Atuais\n\n");
Mostrar_Pessoa(x);
printf("\n\nNovos Dados\n\n");
Ler_Pessoa(&x);

fseek(fp,-(long)sizeof(PESSOA),SEEK_CUR);
fwirite(&x,sizeof(PESSOA),1,fp);
fflush(fp);
}

void Apagar_Pessoa()
{PESSOA x;
 long int n_reg;
 char resp;

 printf("Qual o N° do Registro: ");
 scanf("%ld", & n_reg);fflush(stdin);
 if (fseek(fp,(n_reg-1)*sizeof(PESSOA),SEEK_SET)!=0)
 {
     Mensagem("Registro Inexistente ou Problema no posicionamento!!!");
     return;
 }
 if (fread(&x,sizeof(PESSOA),1,fp)!=1)
 {
     Mensagem("Problemas na Leitura do Registro!!!");
     return;
 }

 if (x.Status=='*')
 {
     Mensagem("Registro já está Apagado!!!\n\n");
     return;
 }
 printf("\n\nDados Atuais\n\n");
 Mostrar_Pessoa(x);
 printf("\n\nApagar o Registro (s/n)???: "); resp = getchar();
 fflush(stdin);
 if (toupper(resp)!='s') return;

 x.Status='*';
 fseek(fp,-(long) sizeof(PESSOA),SEEK_CUR);

 fwrite(&x,sizeof(PESSOA),1,fp);
 fflush(fp);
}

void Listar()
{ long int N_Linhas =0;
 PESSOA reg;
 rewind(fp);
 while(1)
 {
     if (fread(&reg,sizeof(reg),1,fp)!=1) break;
     if (reg.Status=='*') continue ;
     Mostrar_Pessoa(reg);
     N_Linhas++;
     if (N_Linhas%20==0)
        Mensagem("PRESSIONE <ENTER> para continuar . . . ");
 }
    Mensagem("\n\nPRESSIONE <ENTER> para continuar . . . ");

}

void Pesquisar_Idades(int ini, int fim)
{PESSOA reg;
rewind(fp);

while (fread(&reg,sizeof(PESSOA),1,fp))
    if (reg.Status!='*' && reg.Idade>=ini && reg.Idade<=fim)
    Mostrar_Pessoa(reg);

    Mensagem("\n\nPRESSIONE <ENTER> para continuar . . . ");

}

void Pesquisar_Nome(char *s)
{ PESSOA reg;
  rewind(fp);

  while (fread(&reg,sizeof(PESSOA),1,fp))
    if (reg.Status!='*' && strstr(reg.Nome,s))
    Mostrar_Pessoa(reg);

  Mensagem("\n\nPRESSIONE <ENTER> para continuar . . . ");

}

main()
{
    char Opcao;
    Inic();
    while ((Opcao =Menu(MainMenu))!=OP_SAIR)
      switch (Opcao)
    { case OP_INSERIR: Inserir_Pessoa(); break;
      case OP_ALTERAR: Alterar_pessoa(); break;
      case OP_APAGAR:  Apagar_Pessoa();  break;
      case OP_LISTAR:  Listar(); break;
      case OP_PESQUISAR:
        while ((Opcao=Menu(PesqMenu))!=OP_SAIR)
            switch (Opcao)
        {
        case OP_PESQ_IDADE:
            { int n1,n2;
              printf("Qual o intervalo de Idades: ");
              scanf("%d%d",&n1,&n2); fflush(stdin);
              Pesquisar_Idades(n1,n2);
                    break;

            }
        case OP_PESQ_NOME:
            { char string[BUFSIZ+1];
              printf("Qual o Nome a Procurar: ");
              gets(string);fflush(stdin);
              Pesquisar_Nome(string);

            }
        }

    }
}


 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!