Ir para conteúdo
Fórum Script Brasil
  • 0

erro envolvendo ponteiros[Resolvido]


asantos38

Pergunta

Boa noite a todos.

Estou tentando fazer um pequeno programa de cadastro, mas meu código contém erros que não estou conseguindo resolver.

segue o código e a mensagem de erro:

main.c:

#include <stdio.h>
#include <stdlib.h>
#include "pessoa.h"

int main(){
	struct Pessoa pessoas[3];
	int limite;

	for(limite = 0; limite < 3; limite++){
		system("clear");

		printf("Cadastrando a %da. pessoa\n\n", limite + 1);

		pessoas[limite] = gerarPessoa();
	}

	//exibe as pessoas.
	exibirPessoa(pessoas, 3);

	return 0;
}

pessoa.h:

#ifndef PESSOA_H_INCLUDED
#define PESSOA_H_INCLUDED

//definição de tipo.
struct Pessoa{
	char nome[45];

	int idade;

	float altura;
};

struct Pessoa gerarPessoa();

void exibirPessoa(struct Pessoa*, int);

#endif

pessoa.c:

#include <stdio.h>
#include <stdlib.h>
#include "pessoa.h"

struct Pessoa gerarPessoa(){
	//declaração de variáveis.
	struct Pessoa pessoa;

	//system("clear");

	printf("Nome: ");
	scanf("%[^\n]s", pessoa.nome);

	printf("Idade: ");
	scanf("%d%*c", &pessoa.idade);

	printf("Altura: ");
	scanf("%f%*c", &pessoa.altura);

	return pessoa;
}

void exibirPessoa(struct Pessoa* pessoa, int tamanho){
	int contador;

	system("clear");

	for(contador = 0; contador < tamanho; contador++){
		printf("Nome: %s\n", *(pessoa + contador)->nome);

		printf("Idade: %d\n", *(pessoa + contador)->idade);

		printf("Altura: %.2f\n\n", *(pessoa + contador)->altura);
	}
}

erro:

pessoa.c: In function ‘exibirPessoa’:
pessoa.c:29:18: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   printf("Nome: %s\n", *(pessoa + contador)->nome);
                 ~^     ~~~~~~~~~~~~~~~~~~~~~~~~~~
                 %d
pessoa.c:31:25: error: invalid type argument of unary ‘*’ (have ‘int’)
   printf("Idade: %d\n", *(pessoa + contador)->idade);
                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
pessoa.c:33:30: error: invalid type argument of unary ‘*’ (have ‘float’)
   printf("Altura: %.2f\n\n", *(pessoa + contador)->altura);
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Desde já agradeço.

 

Editado por asantos38
tópico resolvido
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Certo! São 3x erros:

  1. Está acontecendo porque a máscara de dados strings (%s) da função printf espera um tipo strings que no dialeto C é um ponteiro para tipos char. Concluindo esse ponto temos o seguinte problema o uso simultâneo de dois desreferenciadores (* ->), você deve escolher apenas 1 ou segundo modo de desreferenciar o ponteiro para struct. Assim: 
    printf("Nome: %s\n", (pessoa + contador)->nome);    /* Desreferenciador p. struct */
    printf("Nome: %s\n", (*(pessoa + contador)).nome);  /* Desreferenciador p. padrão */

     

  2. Está acontecendo porque a máscara de dados decimal (%d) da função printf espera um tipo inteiro que no dialeto C é um int, long int ou até long long int para tipos inteiros. Concluíndo esse ponto temos o seguinte problema; o uso simultâneo de dois desreferenciadores (* ->), você deve escolher apenas 1 ou segundo modo de desreferenciar o ponteiro para struct. Assim: 

    printf("Idade: %d\n", (pessoa + contador)->idade);     /* Desreferenciador p. struct */
    printf("Idade: %d\n", (*(pessoa + contador)).idade);   /* Desreferenciador p. padrão */

     

  3. É análogo o que já foi visto.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...