Ir ao conteúdo
  • Cadastre-se

Vetores de struct em função


wurilo

Posts recomendados

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");
}
}



Link para o comentário
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;
Link para o comentário
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?

Link para o comentário
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' )}

:)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...