Ir ao conteúdo

Posts recomendados

Postado

Crie uma estrutura capaz de armazenar o nome e a data de nascimento de uma pessoa. Agora, escreva um programa que leia os dados de seis pessoas. Calcule e exiba os nomes da pessoa mais velha e da mais nova.

 

Código abaixo: 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct nascimento{
	char nome[40];
	int dia,mes,ano;
};
int main(){
	setlocale(LC_ALL,"Portuguese");
	struct nascimento dados[6];
	printf("\t\tCALCULANDO A MAIOR E MENOR IDADE ENTRE 5 PESSOAS\n\n");
	for(int i=0;i<6;i++){
		printf("Olá!\nPor favor, insira seu nome: ");
		scanf("%s",dados[i].nome);
		printf("%s, digite o dia que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].dia);
		printf("%s, digite o mês que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].mes);
		printf("%s, digite o ano que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].ano); printf("\n\n");
	}
	int diatual=24,mesatual=2,anoatual=2022,idmaisvelha=-1,idmaisnova=0;
	char maisnova,maisvelha;
	for (int i=0;i<6;i++){
		int totalIdade=365*anoatual+30*mesatual+diatual-365*dados[i].ano-30*dados[i].mes-dados[i].dia;
		if(totalIdade>idmaisvelha){
			idmaisvelha=totalIdade;
			strcpy(maisvelha,dados[i].nome);
		}
		if(totalIdade<idmaisnova){
			idmaisnova=totalIdade;
			strcpy(maisnova,dados[i].nome);
		}
		int anos=totalIdade/365;
		totalIdade=totalIdade%365;
		int meses=totalIdade/30;
		totalIdade=totalIdade%30;
		int dias=totalIdade;
		printf("%s tem %d anos, %d meses e %d dias de idade.\n",dados[i].nome,anos,meses,dias);
	}
	printf("%s é a pessoa mais velha.\n%s é a pessoa mais nova.\n",maisvelha,maisnova);
	system("pause");
}

Meu compilador está apresentando o seguinte erro: 

   [Error] invalid conversion from 'char' to 'char*' [-fpermissive]

   [Note] initializing argument 1 of 'char* strcpy(char*, const char*)'

 

Isso nas duas linhas que tem strcpy(maisnova...) e strcpy(maisvelha...). 

Alguém saberia dizer o porquê?

Postado
2 horas atrás, Leucosia disse:

Isso nas duas linhas que tem strcpy(maisnova...) e strcpy(maisvelha...). 

Alguém saberia dizer o porquê?

Nos dois parâmetros da função strcpy é esperado um ponteiro char referente a string (vetor de char terminado em nulo). Porém em um dos parâmentros você só está passando um char (maisvelha e maisnova). Para copiar o conteúdo, declare a string com o tamanho necessário para receber a outra e não apenas um char como fez nas variáveis maisvelha e maisnova.

  • Curtir 1
  • Obrigado 1
Postado

@Flávio Pedroza @Midori Muito obrigada! Funcionou, porém está dando outro erro

 

Ao invés de exibir o nome da pessoa mais nova, está exibindo a letra "D", sendo que não foi isso que eu digitei

 

Testei o programa com apenas 3 pessoas para caber no print (a questão pede 6)

915142866_Semttulo.thumb.png.84aa33a7dc497d0b033cbdf7a2f73d26.png

 

Segue o código novamente

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
struct nascimento{
	char nome[40];
	int dia,mes,ano;
};
int main(){
	setlocale(LC_ALL,"Portuguese");
	struct nascimento dados[6];
	printf("\t\tCALCULANDO A MAIOR E MENOR IDADE ENTRE 5 PESSOAS\n\n");
	for(int i=0;i<3;i++){
		printf("Olá!\nPor favor, insira seu nome: ");
		scanf("%s",dados[i].nome);
		printf("%s, digite o dia que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].dia);
		printf("%s, digite o mês que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].mes);
		printf("%s, digite o ano que você nasceu: ",dados[i].nome);
		scanf("%d",&dados[i].ano); printf("\n\n");
	}
	int diatual=24,mesatual=2,anoatual=2022,idmaisvelha=-1,idmaisnova=0;
	char maisnova[40],maisvelha[40];
	for (int i=0;i<3;i++){
		int totalIdade=365*anoatual+30*mesatual+diatual-365*dados[i].ano-30*dados[i].mes-dados[i].dia;
		if(totalIdade>idmaisvelha){
			idmaisvelha=totalIdade;
			strcpy(maisvelha,dados[i].nome);
		}
		if(totalIdade<idmaisnova){
			idmaisnova=totalIdade;
			strcpy(maisnova,dados[i].nome);
		}
		int anos=totalIdade/365;
		totalIdade=totalIdade%365;
		int meses=totalIdade/30;
		totalIdade=totalIdade%30;
		int dias=totalIdade;
		printf("%s tem %d anos, %d meses e %d dias de idade.\n",dados[i].nome,anos,meses,dias);
	}
	printf("%s é a pessoa mais velha.\n %s é a pessoa mais nova.\n",maisvelha,maisnova);
	system("pause");
}

 

  • Curtir 1
Postado

@Leucosia Não precisa copiar os nomes para outras strings. Já que está usando vetores é só guardar o indice deles, p.ex,

 

int idmaisvelha = 0;
int idmaisnova = 0;
int velha;
int nova;

 

Guarde os indices no loop,

if(i == 0){
    nova = velha = totalIdade;
}else{
    if(totalIdade > velha){
        idmaisvelha = i;
        velha = totalIdade;
    }else if(totalIdade < nova){
        idmaisnova = i;
        nova = totalIdade;
    }
}

 

E mostre os nomes com o id,

printf(
    "%s é a pessoa mais velha.\n %s é a pessoa mais nova.\n",
    dados[idmaisvelha].nome, dados[idmaisnova].nome
);

 

  • Curtir 1
  • Obrigado 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...