Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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






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

×