listakpostal-27 programa em c "falha de segmentação"

1. listakpostal-27 programa em c "falha de segmentação"

Jonny Ernani Maia
maia99

(usa Debian)

Enviado em 26/12/2011 - 23:57h



#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&#65533;&#65533;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&#65533;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&#65533;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&#65533;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;
}


Este programa eu ja encaminhei para os senhores. Ele responde como "falha de segmentação". Porem foi compilado e não deu erro. Outro não consigo abrir o arquivo dados.dat ou txt. Muito obrigado.
Jonny Maia. O programa deve fazer um lista com: Nome, endereço, CEP Cidade, estado. e gravar no arquivo dados.dat ou txt.

Muito obrigado.


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts