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

Struct: Títulos não lidos


Parazeit

Pergunta

-Fazer um programa que cria uma estrutura livro, que contém os elementos título, ano de edição, número de páginas e preço. Criar uma variável desta estrutura que é um vetor de elementos. Ler os valores para a estrutura e imprimir a média do número de páginas do livros. Além disso mostrar os dados do livro com maior preço e menor preço, inclusive se houver mais de um livro com o mesmo preço.

 

Tô iniciando agora em struct, e, dada a questão, tentei montar um programa que seguisse operando o que ela pede, mas por algum motivo que n consigo identificar, o programa só lê o título do primeiro livro. Estou usando o Dev C++, escrevendo em C, gostaria que alguém me ajudasse a identificar o problema (Irei publicar o código por completo para melhor visualização, pontuando o que fiz em cada pedaço).

#include <stdio.h>
#define T 2

int main () {
	struct dados {
		char titulo[71];
		int ano;
		int pag;
		float preco;
	};
	
	struct dados livro[T]; // Declarando estrutura e variáveis.
	int i;
	float mediap = 0.0;
	float maior = 0.0, menor = 9999999999999999.9;
	
	for (i = 0; i < T; i++) { // Entrada de dados.
		
		printf ("\nLivro %d:\n", i + 1);
		
		printf ("\n\tInsira o titulo do livro: "); // JUSTO AQUI, RECEBO APENAS O PRIMEIRO TÍTULO.
		fgets (livro[i].titulo, 71, stdin);
		
		printf ("\n\tInsira o ano de edicao: ");
		scanf ("%d", &livro[i].ano);
		
		printf ("\n\tInsira o numero de paginas: ");
		scanf ("%d", &livro[i].pag);
		
		printf ("\n\tInsira o preco no mercado: ");
		scanf ("%f", &livro[i].preco);
		
			if (livro[i].preco < menor)
			menor = livro[i].preco;
			
			if (livro[i].preco > maior)
			maior = livro[i].preco;
		
			mediap = mediap + livro[i].pag;
	}
	
	//system ("cls"); // Limpa a tela
	
	printf ("\n\nA media do numero de paginas dos livros: %.2f\n", (float)mediap/T); // Saída de dados
	printf ("\nO maior preco dentre os livros: %.2f\n", maior);
	printf ("\nO menor preco dentre os livros: %.2f\n", menor);
		
	return 0;
}

 

Segue o programa que tentei fazer:

Editado por Parazeit
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bom, ao que parece o problema parece estar sendo causado pelo chamado ( Buffer do Teclado ), é um elemento responsavel por detectar a entrada de dados provenientes do teclado, em certas situações ao presionarmos a tecla ( Enter ) um caractere "\n" nova linha fica armazenado como ultimo caractere inserido, infelizmente tambem é usado em certas situações para indicar o fim da entrada de dados do teclado, sendo assim pula a entrada de novos dados ( livros ) neste caso!

Sendo assim algo que voce deve fazer é realizar a ( limpeza de Buffer ) que eliminará o caractere "\n" a cada entrada de dados ( fgets ), ( scanf ) ou similares!

Normalmente voce encontrará para windows a função fflush( stdin ); porem recomendo que não a use uma vez que ela costuma ter uma comportamento indefinido passivel de causar problemas em seu programa!

No proprio forum existem alguns topicos falando sobre problemas similares, recomendo que dê uma pesquisada sobre o assunto!

Link para o comentário
Compartilhar em outros sites

  • 0
11 horas atrás, Felipe222 disse:

Bom, ao que parece o problema parece estar sendo causado pelo chamado ( Buffer do Teclado ), é um elemento responsavel por detectar a entrada de dados provenientes do teclado, em certas situações ao presionarmos a tecla ( Enter ) um caractere "\n" nova linha fica armazenado como ultimo caractere inserido, infelizmente tambem é usado em certas situações para indicar o fim da entrada de dados do teclado, sendo assim pula a entrada de novos dados ( livros ) neste caso!

Sendo assim algo que voce deve fazer é realizar a ( limpeza de Buffer ) que eliminará o caractere "\n" a cada entrada de dados ( fgets ), ( scanf ) ou similares!

Normalmente voce encontrará para windows a função fflush( stdin ); porem recomendo que não a use uma vez que ela costuma ter uma comportamento indefinido passivel de causar problemas em seu programa!

No proprio forum existem alguns topicos falando sobre problemas similares, recomendo que dê uma pesquisada sobre o assunto!

 

Valeu, não fazia ideia de que isso pudesse ocorrer. Pesquisarei mais sobre.

Editado por Parazeit
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...