Ir ao conteúdo
  • Cadastre-se
wurilo

Vetores de struct em função

Recommended Posts

Boa noite Pessoal.


Estou com problemas em um código em C, tenho q pegar dados (nome e telefone) de algumas pessoas em uma Struct, depois armazena-las em um vetor, tudo isso por uma função/procedimento, abaixo segue meu código, porém na hora de imprimir sai uns caracteres estranhos. Se puderem me ajudar agradeceria muito.


Estou usando a plataforma DEV C++



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

#define MAX 2

typedef struct dadosPessoais
{
char nome = ' ';
int telefone = -1;
}DadosPessoais;

void inserir(DadosPessoais *vetor);
void listar(DadosPessoais *vetor);

int main()
{

int escolha=1;
DadosPessoais vetor[MAX];

// se a escolha for diferente de 3, ele continua... o que inicialmente é verdade
// pois escolha é igual a 1

while (escolha!=5)
{

printf("\n\n ----------------------- ");

printf("\n 1 - Inserir novo registro ");
printf("\n 2 - Limpar registros da tabela ");
printf("\n 3 - Fechar Programa ");
printf("\n\n Escolha uma opcao: ");
scanf("%d",&escolha);


// estrutura switch
switch (escolha)
{

case 1:
{
system ("cls");
inserir(vetor);
break;
}

case 2:
{
system ("cls");
listar(vetor);
break;
}

// opção padrão
default:
{
system ("cls");

// se for escolhida a opção 3, ele pula o while utilizando continue para isso
if( escolha==3)
{
continue;
}
// caso o usuário digite um numero acima de 5, ele irá informar que nao existe essa opção
printf("\n\n Nenhuma opcao foi escolhida ");
break;
}
}

}
if( escolha==3)
printf("\n\n O Programa foi fechado");

system("PAUSE");

}

void inserir(DadosPessoais *vetor)
{
int x=3, i, espaco ;

for(i=0; i<x; i++)
{
if (vetor[i].nome == ' ')
{
espaco = 1;
break;
}
else
{
espaco = 2;
}

}

if (espaco == 1)
{
printf("Digite nome: \n");
scanf(" %s", &vetor->nome);

printf("Digite o telefone: \n ");
scanf(" %d", &vetor->telefone);
}
else
{
printf("Nao ha espaco vago \n ");
}
}

void listar(DadosPessoais *vetor)
{
int x=MAX, i, espaco ;

for(i=0; i<x; i++)
{
if (vetor[i].nome != ' ')
{
printf(" %c", &vetor[x].nome);
printf("\n");
printf(" %c", &vetor[x].telefone);
printf("\n");
}
else
{
printf("Vetor vazio");
}
}



Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok,

Observe

typedef struct dadosPessoais         {        char nome = ' ';        int telefone = -1;    }DadosPessoais; 
printf("Digite nome: \n");    scanf(" %s", &vetor->nome);

Estranho isso ter copilado, observe se não de copilação;

Outrora se ainda assim rodou
Na declaração scanf(" %s", &vetor->nome); o sistema vai gravar muito bytes em um local reservado com 1 byte

isso não funciona e C; em C++ acredito que também não;

Mesmo que funcione você esta invadindo a memoria overflow ;na maioria dos casos resulta em erro fatal;

 

declare assim:

char nome[15]; // No máximo 14 letras;

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Ok,

Observe

typedef struct dadosPessoais         {        char nome = ' ';        int telefone = -1;    }DadosPessoais; 
printf("Digite nome: \n");    scanf(" %s", &vetor->nome);

Estranho isso ter copilado, observe se não de copilação;

Outrora se ainda assim rodou

Na declaração scanf(" %s", &vetor->nome); o sistema vai gravar muito bytes em um local reservado com 1 byte

isso não funciona e C; em C++ acredito que também não;

Mesmo que funcione você esta invadindo a memoria overflow ;na maioria dos casos resulta em erro fatal;

 

declare assim:

char nome[15]; // No máximo 14 letras;

 

 

Ok,

Observe

typedef struct dadosPessoais         {        char nome = ' ';        int telefone = -1;    }DadosPessoais; 
printf("Digite nome: \n");    scanf(" %s", &vetor->nome);

Estranho isso ter copilado, observe se não de copilação;

Outrora se ainda assim rodou

Na declaração scanf(" %s", &vetor->nome); o sistema vai gravar muito bytes em um local reservado com 1 byte

isso não funciona e C; em C++ acredito que também não;

Mesmo que funcione você esta invadindo a memoria overflow ;na maioria dos casos resulta em erro fatal;

 

declare assim:

char nome[15]; // No máximo 14 letras;

 

Boa noite Mauro,

 

Muito obrigado por me ajudar, porém como saberei após realizar esta alteração se há índices vagos no vetor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok!

Suponho que você declare seu dados assim:

typedef struct dadosPessoais         {        char nome[15]; //Nome no máximo 14 letras         int telefone; // Numero telefone extenso sem formatação Ex: 9999999999    }DadosPessoais;

Em uma lugar qualquer e declaro meu vetor pessoas assim:

struct dadosPessoais Agenda[10] = {0} //O copilador vai iniciar tudo com valor zero;

Basta agora eu fazer assim para verificar se há índice vagos no vetor Agenda:

/* Verifica se no vetor o indice é válido, e se não há dados** @parâmetros** @retorno Não havendo dados retorna: 1 ; Havendo dados: 0; Erro no indice: -1** @Autor: Britivaldo, Mauro.*/ int estaVago(struct dadosPessoais Agenda[10], int indice){   if( indece > 9 || 0 > indice) return -1;   return ( Agenda[indice].nome[0] == '\0' )}

:)

Editado por Mauro Britivaldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×