maia99
(usa Debian)
Enviado em 24/12/2011 - 21:50h
Senhores peço que me ajudem, pois o programa abaxo. É compilado pelo gcc e não dá erros. Mas na execução mostra um erro "falha de segmentação". Meus colegas por favor se voces puderem me ajudar eu agradeço. Preciso executar este programa, pois será um sucesso se eu conseguir. Veja eu chamo um arquivo dados.txt. Onde eu escrevo pelo programa todos os dados e preciso depois verificar se os daos estarão neste arquivo txt.
Muito Obrigado.
Jonny Maia.
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
struct addr{
char name[30];
char street[40];
char city[20];
char state[3];
unsigned long int zip;
} *addr_info;
int init_list(void);
int enter(void);
int delete(void);
int list(void);
int menu_select(void);
int find_free(void);
int main(void)
{
inicia();
printf("Legal heim\n\n\n");
system("color 2e");
char choice;
int init_list();// Iniciliaza a matriz de estruturas
for(;;) {
choice=menu_select();
switch(choice) {
case 1: enter();
break;
case 2: delete();
break;
case 3: list();
break;
case 4: exit(0);
case 5: salva();
}
}
}
//Inicializa a lista
int init_list(void)
{
register int t;
for(t=0; t<MAX; t++)
addr_info[t].name[0] = '{TTEXTO}';
}
//Otem a seleção
int menu_select(void)
{
char s[80];
int c;
printf("1. Inserir um nome\n\n");
printf("2. Excluir um nome \n\n");
printf("3. Listar o arquivo \n\n");
printf("4. Sair\n\n");
printf("5. Salvar Registros\n\n");
do{
printf("Digite sua escolha:____");
scanf("%c",(s));
c = atoi(s);
}while(c<0 || c>5);
return c;
}
//Insere os endereços na lista.
int enter(void)
{
int slot;
char s[80];
slot = find_free();
if(slot==-1) {
printf("Lista cheia\n\n");
return;
}
printf("Digite o nome: \n\n");
scanf("%c",(addr_info[slot].name));
printf("Digite a rua: \n\n");
scanf("%c",(addr_info[slot].street));
printf("Digite a cidade: \n\n");
scanf("%c",(addr_info[slot].city));
printf("Digite o Estado: \n\n");
scanf("%c",(addr_info[slot].state));
printf("Digite o CEP: \n\n");
scanf("%c",(s));
addr_info[slot].zip = strtoul(s, '{TTEXTO}', 10);
}
//Encontra um estrutura não usada
int find_free(void)
{
register int t;
for(t=0;addr_info[t].name[0] && t<MAX; t++)
if(t==MAX) return -1; //nenyhum elemento livre
return t;
}
/* int procura(char nome[])
{
register int t;
for(t=0; t < MAX; t++){
if(strcmp(nome, addr_info.name[t])
return t;
}
return -1;
} */
//Apaga um endereço
int delete(void)
{
register int slot;
char s[80];
printf(" Digite o registro #:\\n\n");
slot = atoi(s);
if(slot>=0 && slot < MAX)
addr_info[slot].name[0]= '{TTEXTO}';
}
//Mostra lista na tela
int list(void)
{
register int t;
for(t=0; t<MAX; ++t){
if(addr_info[t].name[0]){
printf("---------------------------------\n");
printf("%s \n\n\n", addr_info[t].name);
printf("%s \n\n\n", addr_info[t].street);
printf("%s \n\n\n", addr_info[t].city);
printf("%s\n\n\n", addr_info[t].state);
printf("%lu\n\n\n", addr_info[t].zip);
system("sleep 4");
}
}
printf("\n\n");
}
int salva(void){
FILE *dadosHd;
dadosHd = fopen("dados.dat", "r+");
fwrite(addr_info, sizeof(struct addr), MAX, dadosHd);
fclose(dadosHd);
return 0;
}
int inicia(void){
FILE *dadosHd;
dadosHd = fopen("dados.dat", "r+");
addr_info = malloc(sizeof(struct addr) * MAX);
fread(addr_info, sizeof(struct addr), MAX, dadosHd);
printf("%d ------------------<\n", sizeof(struct addr));
printf("nome - %s\n", addr_info[0].name);
fclose(dadosHd);
return 0;
}