Ir ao conteúdo
  • Cadastre-se

C Retornar char e float


Posts recomendados

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#include <math.h>

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

l livros_somar(l livroA, l livroB){
	float livroC;

	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;

	

	return livroA;

}

l livros_menor(l livro1, l livro2){
	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
		strcpy(livro1.titulo, livro2.titulo);
	}

	if(strlen(livro1.autor) > strlen(livro2.autor)){
		strcpy(livro1.autor, livro2.autor);
	}

	return livro1;

}

int main(void){
	setlocale(LC_ALL,"Portuguese");

	int i;
	float soma_livros;
	char menor_livros[100];

	l livros[2];

	for(i=0;i<2;i++){
		printf("Livro %d\n",i+1);
		printf("Informe o titulo: ");
		fflush(stdin);
		fgets(livros[i].titulo, 100, stdin);

		printf("Informe o autor: ");
		fflush(stdin);
		fgets(livros[i].autor, 100, stdin);

		printf("Informe o registro: ");
		scanf("%f",&livros[i].registro);

		printf("Informe o preco: ");
		scanf("%f",&livros[i].preco);
	}

	soma_livros= livros_somar(livros[0], livros[1]);
	menor_livros= livros_menor(livros[0], livros[1]);

	printf("Dados somados= %f\n",soma_livros);
	printf("Menor= %s\n",menor_livros);

	return 0;

}

Galera, to com um pequeno problema no meu código em C, vou enviar o exercício e o código logo a baixo!

 

2) Crie uma estrutura para armazenar livros de uma biblioteca. A estrutura deve armazenar o título do livro, o autor, o número de registro e o preço. Crie uma função que receba duas estruturas do tipo livro e retorne uma estrutura do tipo livro com os dados somados. Para os tipos não numéricos na estrutura, retorne a palavra de menor tamanho.

 

 

image.thumb.png.cf6b37407f44bfb7fa7e057ed6165f00.png

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Matheus Eduardo Vieira    esse erro é por que são dados incompatíveis  de tipos diferentes , e essa variável que vai receber o retorno precisa ser do mesmo tipo , struct ,  então seu código poderia ser assim  :

#include<stdio.h>
#include<stdlib.h>
#include<locale.h>
#include<string.h>
#include <math.h>

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

l livros_somar(l livroA, l livroB){
	float livroC;
	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;
	return livroA;
}

l livros_menor(l livro1, l livro2){
	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
		strcpy(livro1.titulo, livro2.titulo);// menor qtd de carateres
	}

	if(strlen(livro1.autor) > strlen(livro2.autor)){
		strcpy(livro1.autor, livro2.autor);// menor qtd de carateres
	}
	return livro1;
}

int main(){
	setlocale(LC_ALL,"Portuguese");

	int i;
	//float soma_livros;       // Tipos incompatíveis
	l soma_livros;             // compatíveis
	//char menor_livros[100];  // Tipos incompatíveis
	l menor_livros;            // compatíveis

	l livros[2];
    for(i=0;i<2;i++){
        printf("Livro %d\n",i+1);
        printf("Informe o titulo: ");
        fflush(stdin);                                      // limpar o buffer do teclado
        fgets(livros[i].titulo, 100, stdin);                // pega toda a linha e mais o NewLine
        livros[i].titulo[strlen(livros[i].titulo)-1] = '\0';// remover NewLine para não pular linha
        printf("Informe o autor: ");
        fflush(stdin);                                      // limpar o buffer do teclado
        fgets(livros[i].autor, 100, stdin);                 // pega toda a linha e mais o NewLine
        livros[i].autor[strlen(livros[i].autor)-1] = '\0';  // remover NewLine para não pular linha
        printf("Informe o registro: ");
        scanf("%f",&livros[i].registro);

        printf("Informe o preco: ");
        scanf("%f",&livros[i].preco);
    }

    soma_livros  = livros_somar(livros[0], livros[1]);
    menor_livros = livros_menor(livros[0], livros[1]);

    printf("Registro somados -= %.2f\n",soma_livros.registro);
    printf("Preco somados ----= %.2f\n",soma_livros.preco   );
    printf("Menor Titulo -----= %s  \n",menor_livros.titulo );
    printf("Menor Autor ------= %s  \n",menor_livros.autor  );

    return 0;
}

 

Link para o comentário
Compartilhar em outros sites


Você escreveu mais e menos do que foi pedido... E está errado.

 

typedef struct biblioteca{
	char titulo[100];
	char autor[100];
	float registro;
	float preco;
}l;

 

10 horas atrás, Matheus Eduardo Vieira disse:

Crie uma estrutura para armazenar livros de uma biblioteca. A estrutura deve armazenar o título do livro, o autor, o número de registro e o preço

 

Está ok, até na ordem do enunciado.

 

MAS...

  • porque um número de registro float? Acha que alguém vai digitar o livro com o código -123.23 ou algo assim? Não vai. Não vai sequer operar com esses números. Somar registro não leva a nada, seria como somar CPF. Veja o exemplo da realidade: todo livro publicado já tem um número, como você pode suspeitar, e se chama ISBN. (Claro que ia ter 3 ou 4 letras e uma abreviação de uma expressão em inglês :D ) 
    E esse número é uma sequência de 10 ou 13 posições. Veja direto da Amazon: todos os livros publicados do mundo tem isso

    image.png.1e8765a91f8b2821b35ddffe3cdb6aec.png 

    Em resumo: use um char[] também e na soma retorne o menor, tanto faz. Sem inventar nada. Pegue um livro ou abra um anúncio e simplesmente faça igual :) 
     
  • Porque a estrutura não se chama simplesmente Livro?

 

11 horas atrás, Matheus Eduardo Vieira disse:

Crie uma função que receba duas estruturas do tipo livro e retorne uma estrutura do tipo livro com os dados somados. Para os tipos não numéricos na estrutura, retorne a palavra de menor tamanho

 

E aqui você escreveu duas funções e não fez o previsto. Note que o registro de um livro não é exatamente um número e sim 5 grupos de números e o último é um dígito verificador. Não se soma essas coisas. De todo modo se declarar como int apenas some.

 

l livros_somar(l livroA, l livroB){
	float livroC;

	livroA.registro+= livroB.registro;
	livroA.preco+= livroB.preco;

	

	return livroA;

}
  • Imagino que era para ser essa a função-resposta. Que pretendia fazer com o livroC que está aí parado?
  • Podia fazer o simples e tratar os campos um a um. E receber o endereço de cada estrutura já que não vai mexer nelas e elas são relativamente grandes. Em geral não se passa structs com centenas de bytes assim...
  • l livros_menor(l livro1, l livro2){
    	if(strlen(livro1.titulo) > strlen(livro2.titulo)){
    		strcpy(livro1.titulo, livro2.titulo);// menor qtd de carateres
    	}
    
    	if(strlen(livro1.autor) > strlen(livro2.autor)){
    		strcpy(livro1.autor, livro2.autor);// menor qtd de carateres
    	}
    	return livro1;
    }

    E aqui foi onde você não entendeu o espírito da coisa:

image.png.3e252ce40f061a2a9177c112b59bcddf.png

 

O que você quer na verdade é declarar um novo livro e mostrar o resultado. E nem precisava de um vetor de livros na verdade. Apenas 3 livros.

l livro_resultado = somar_livros( livro1, livro2 );
l livro_resultado = somar_livros( livros[0], livros[1]);

Veja como pode ser mais simples:

 

Exemplo

typedef struct
{
	char titulo[100];
	char autor[100];
	char registro[20];
	float preco;
}	Livro;

typedef struct
{
	char    nome[100];
	int     N; // o total de livros
	Livro*  Acervo; // O vetor de livros
}	Biblioteca;

A biblioteca tem um acervo de N livros e eles estão DENTRO da estrutura, por exemplo. E 

Livro  somar(Livro*, Livro*);
int    mostra(Livro*);

O programa só trata Livro então somar e mostra faz o esperado. Não precisa ficar repetindo livros...

 

E seu programa podia ser assim simples e mais fácil de ler

int main(int argc, char** argv)
{
	Biblioteca B1 = { "Ciencias II", 0 };

	Livro	L1 = {
		"sendmail",
		"Bryan Costales",
		"1-56592-839-3",
		59.95 };
	Livro	L2 = { 
		"Data Structures and Algorithms ",
		"Alfred V. Aho",
		"0-20100-023-7",
		74.99 };

	Livro L3 = somar(&L1, &L2);
	mostra(&L1);
	mostra(&L2);
	printf("\"Somando\" os registros:\n");
	mostra(&L3);

	return 0;
}

É só um exemplo cm dados copiados direto da Amazon e do seu enunciado. Mas acho que dá pra entender:

Você cria os 2 livros e mostra. Soma e mostra. Só isso. E tem a estrutura. E pode até declarar várias bibliotecas e montar os acervos :D 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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