Ir ao conteúdo

Posts recomendados

Postado

Será que alguem pode me dar uma luz sobre o porque meu código só tá lendo o nome na primeira vez

#include <stdio.h>
#include <string.h>
#include <locale.h>
#define tf 10

struct pessoa {
	char nome [20];
	int idade;
};

int main (){
	setlocale (LC_ALL, "portuguese");
	struct pessoa p[tf];
	int i;
	int menor = 999, maior = 0;
	
	for (i=0;i<tf;i++){
		
		printf ("\nEntre com o nome: ");
		fgets (p[i].nome, 20, stdin);
		fflush (stdin);
		
		printf ("\nEntre com a idade: ");
		scanf ("%d", &p[i].idade);
	}
	
	for (i=0;i<tf;i++){
		 if(p[i].idade > maior) 
		 maior = i;
         
		 if(p[i].idade < menor) 
	   	 menor = i;
		
	}
	printf ("\nMais velho!\nNome: %c\nIdade: %d", p[maior].nome, p[maior].idade);
	printf ("\nMais novo!\nNome: %c\nIdade: %d", p[menor].nome, p[menor].nome);
	
}

 

Postado

Primeiro corrija essa parte:

printf ("\nMais velho!\nNome: %c\nIdade: %d", p[maior].nome, p[maior].idade);
printf ("\nMais novo!\nNome: %c\nIdade: %d", p[menor].nome, p[menor].nome);

//Para:

printf ("\nMais velho!\nNome: %s\nIdade: %d", p[maior].nome, p[maior].idade);
printf ("\nMais novo!\nNome: %s\nIdade: %d", p[menor].nome, p[menor].idade);

 

adicionado 9 minutos depois

Use scanf no lugar do fgets:

 

fgets (p[i].nome, 20, stdin);
fflush (stdin);

//Por:

scanf("%s",p[i].nome);
fflush (stdin);

 

Postado

Outro erro está nesse for:

 

for (i=0;i<tf;i++){
		 if(p[i].idade > maior) 
		 maior = i;
         
		 if(p[i].idade < menor) 
	   	 menor = i;
}
// mude para:
for (i=0;i<tf;i++){
		 if(p[i].idade > maior) 
		 maior = p[i].idade;
         
		 if(p[i].idade < menor) 
	   	 menor = p[i].idade;
}

 

adicionado 2 minutos depois

Outra coisa, você definiu tf com 10 e colocou no for i=0;i<tf, o que significa que o for vai pedir o nome onze vezes. Se essa é a intenção, ok, se não tem que colocar i=1 ou i<9.

Postado
1 hora atrás, Luís Roberto C. da Silva disse:

if(p[i].idade < menor) menor = p[i].idade; }

Mas eu tô trabalhando com struct, acho que não dá pra guardar uma informação tipo struct numa variável comum. Deu erro 😧

Postado
2 horas atrás, Luís Roberto C. da Silva disse:

adicionado 2 minutos depois

Outra coisa, você definiu tf com 10 e colocou no for i=0;i<tf, o que significa que o for vai pedir o nome onze vezes. Se essa é a intenção, ok, se não tem que colocar i=1 ou i<9.

Esta equivocado colega, o laço vai ser executado dez vezes (o i vai de 0, 1, 2, 3, 4, 5, 6, 7, 8, 9).

Seriam onze vezes se fosse <=tf.

adicionado 9 minutos depois
3 horas atrás, Luís Roberto C. da Silva disse:

Primeiro corrija essa parte:

 

adicionado 9 minutos depois

Use scanf no lugar do fgets:

 

 

Colga, o problema é que scanf não acita espaços. Acredito que o objetivo e entrar com nome e sobrenome também. Neste caso fgets é melhor.

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...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!