Eu primeiro faço o cadastro para depois fazer o armazenamento. Segue o código:
#include <stdio.h>
struct dados{
char nome[25];
int idade;
};
typedef struct dados DADOS;
DADOS cadastrar(){
DADOS novo;
system("cls");
fflush(stdin);
puts("Nome: ");
gets(novo.nome);
fflush(stdin);
puts("Idade: ");
scanf("%i", &novo.idade);
return novo;
}
void main(){
//Declarações
int op;
DADOS d;
//Instruções
do{
puts("1 - cadastrar");
puts("2 - listar");
scanf("%i", &op);
switch(op){
case 1:
d=cadastrar();
armazenar(d);
break;
case 2:
listar(d);
break;
}
}while(1);
}
void armazenar(DADOS a){
FILE *arq;
if((arq=fopen("dados.txt", "ab"))==0){
puts("ERRO");
}else{
fwrite(&a, sizeof(DADOS), 1, arq);
fclose(arq);
}
}
Função para listar:
void listar(DADOS l){
FILE *arq;
if((arq=fopen("dados.txt", "rb"))==0){
puts("ERRO");
}else{
while(fread(&l, sizeof(DADOS), 1, arq)){
printf("%s %i", l.nome, l.idade);
}
}
}