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(®,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(®,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(®,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);
}
}
}
}