asantos38 Postado Julho 6, 2018 Denunciar Share Postado Julho 6, 2018 (editado) 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 Julho 8, 2018 por asantos38 tópico resolvido Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 britivaldo Postado Julho 7, 2018 Denunciar Share Postado Julho 7, 2018 Certo! São 3x erros: 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 */ 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 */ É análogo o que já foi visto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 asantos38 Postado Julho 8, 2018 Autor Denunciar Share Postado Julho 8, 2018 Boa noite, Britivaldo. Fiz as correções que você mandou e o programa compilou e rodou legal. Obrigado! Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
asantos38
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:
pessoa.h:
pessoa.c:
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.
tópico resolvido
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
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.