Jump to content
  • 0
Parazeit

Struct: Lê apenas o primeiro título - C/C++

Question

-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 5 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. Gostaria que alguém me ajudasse a identificar o problema.

 

Segue o programa que tentei fazer:

 

#include <stdio.h>
#define T 2

int main () {
	struct dados {
		char titulo[71];
		int ano;
		int pag;
		float preco;
	};
	
	struct dados livro[T];
	int i;
	float mediap = 0.0;
	float maior = 0.0, menor = 9999999999999999.9;
	
	for (i = 0; i < T; i++) {
		
		printf ("\nLivro %d:\n", i + 1);
		
		printf ("\n\tInsira o titulo do livro: ");
		fgets (livro[i].titulo, 70, 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");
	
	printf ("\n\nA media do numero de paginas dos livros: %.2f\n", (float)mediap/T);
	printf ("\nO maior preco dentre os livros: %.2f\n", maior);
	printf ("\nO menor preco dentre os livros: %.2f\n", menor);
		
	return 0;
}

 

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ivolini
      Como adicionar numeros de uma struct destro de uma função em uma lista já criada em struct?
      Obrigado
    • By Marcelo Lopes Vidal
      #include<stdio.h> #include<string.h> #include<stdlib.h> struct aluno { char nome[20]; char endereco[50]; char data_de_nascimento[10]; char telefone[15]; float nota1; float nota2; }; struct aluno recadastramento(struct aluno valuno[10]); void media_das_notas(struct aluno valuno[10]); void aprovado_ou_reprovado(struct aluno valuno[10]); void mostrar_informacoes(struct aluno valuno[10]); int main(void) { struct aluno valuno[10]; int op; float media; int i; int j; printf("Digite as informacoes dos alunos"); for(i=1;i<11;i++) { printf("Digite O Nome Do Aluno[%d]\n\n",i); printf("Nome: "); fflush(stdin); gets(valuno[i].nome); printf("\nDigite O Endereco Do Aluno[%d]\n\n",i); printf("Endereco: "); fflush(stdin); gets(valuno[i].endereco); printf("\nDigite A Data De Nascimento Do Aluno [%d] No Formato <00/00/0000>\n\n",i); printf("Data De Nascimento: "); fflush(stdin); gets(valuno[i].data_de_nascimento); for(j=0;j <15; j++) { if(valuno[i].data_de_nascimento[2] != '/' && valuno[i].data_de_nascimento[5] != '/') { printf("ERRO! Digite novamente"); printf("\nDigite A Data De Nascimento Do Aluno [%d] No Formato <00/00/0000>\n\n",i); gets(valuno[i].data_de_nascimento); break; } else { printf("FORMATO CORRETO"); break; } } printf("\nDigite O Telefone Do Aluno [%d] No Formato <(DDD)00000-0000>\n\n",i); printf("Telefone Do Aluno: "); fflush(stdin); gets(valuno[i].telefone); for(j=0;j <15; j++) { if(valuno[i].telefone[0] != '(' && valuno[i].telefone[4] != ')' && valuno[i].telefone[10] != '-') { printf("ERRO! Digite novamente"); printf("Digite O Telefone Do Aluno [%d]: ",i); gets(valuno[i].telefone); break; } else { printf("FORMATO CORRETO"); break; } } printf("\nDigite A Primeira Nota Do Aluno [%d]\n\n",i); printf("Nota 1: "); scanf("%f",&valuno[i].nota1); printf("\nDigite A Segunda Nota Do Aluno [%d]\n\n",i); printf("Nota 2: "); scanf("%f",&valuno[i].nota2); } do { printf("\nMENU\n"); printf("- 1)Editar informações dos alunos \n 2)Mostrar as medias dos alunos \n 3)Dizer se os alunos foram aprovados medias >= 6 ou reprovados (medias <6)\n 4)Listar todas as informações dos alunos"); printf("\n\nOpcao::: "); scanf("%d",&op); switch(op) { case 1: recadastramento(valuno); break; case 2: media_das_notas(valuno); break; case 3: aprovado_ou_reprovado(valuno); break; case 4: mostrar_informacoes(valuno); break; default: printf("\nOpcao INVALIDA\n"); break; } }while(op > 0 && op < 5); } struct aluno recadastramento(struct aluno valuno[10]) //recadastramento de informações//Funções { int i; for(i=1;i<11;i++) { printf("\nDigite O Nome Do Aluno [%d]\n\n",i); printf("Nome: "); fflush(stdin); gets(valuno[i].nome); printf("\nDigite O Endereco Do Aluno [%d]\n\n",i); printf("Endereco: "); fflush(stdin); gets(valuno[i].endereco); printf("\nDigite A Data De Nascimento Do Aluno [%d] No Formato <00/00/0000>\n\n",i); printf("Data De Nascimento: "); fflush(stdin); gets(valuno[i].data_de_nascimento); int j; for(j=0;j < 11; j++) { if(valuno[i].data_de_nascimento[2] != '/' && valuno[i].data_de_nascimento[5] != '/')//validção de data no formato correto { printf("ERRO! Digite novamente"); printf("\nDigite A Data De Nascimento Do Aluno [%d]No Formato <00/00/0000>\n\n",i); gets(valuno[i].data_de_nascimento); break; } else { printf("FORMATO CORRETO"); break; } } printf("\nDigite O Telefone Do Aluno [%d] No Formato <(DDD)00000-0000>\n\n",i); printf("Telefone Do Aluno: "); fflush(stdin); gets(valuno[i].telefone); for(j=0;j <15; j++)//validção de numero no formato correto { if(valuno[i].telefone[0] != '(' && valuno[i].telefone[4] != ')' && valuno[i].telefone[10] != '-') { printf("ERRO! Digite novamente"); printf("Digite O Telefone Do Aluno [i]: ",i); gets(valuno[i].telefone); break; } else { printf("FORMATO CORRETO"); break; } } printf("\nDigite A Primeira Nota Do Aluno [%d]\n\n",i); printf("Nota 1: "); scanf("%f",&valuno[i].nota1); printf("\nDigite A Segunda Nota Do Aluno [%d]\n\n",i); printf("Nota 2: "); scanf("%f",&valuno[i].nota2); } } void media_das_notas(struct aluno valuno[10])//media de notas { int i; for(i=1;i<11;i++) { float media; media = (valuno[i].nota1 + valuno[i].nota2) / 2; printf("Media: %.2f\n",media); } } void aprovado_ou_reprovado(struct aluno valuno[10])//se foi aprovado ou reprovado { int i; for(i=1;i<11;i++) { float media; media = (valuno[i].nota1 + valuno[i].nota2) / 2; if(media >= 6) { printf("\nAluno [%d] APROVADO\n",i); } else { printf("\nAluno [%d] REPROVADO\n",i); } printf("\nMedia do Aluno[%d]: %.2f\n",i,media); } } void mostrar_informacoes(struct aluno valuno[10])//mostrando informções de cadastro { int i; for(i=1;i<11;i++) { printf("-Listagem Do Aluno[%d]",i); printf("\n\nNome do Aluno[%d]: %s",i,valuno[i].nome); printf("\nEndereco do Aluno[%d]: %s",i,valuno[i].endereco); printf("\nData De Nascimento do Aluno[%d]: %s",i,valuno[i].data_de_nascimento); printf("\nTelefone do Aluno[%d]: %s",i,valuno[i].telefone); printf("\nNota 1 do Aluno[%d]: %.2f ",i,valuno[i].nota1); printf("\nNota 2 do Aluno[%d]: %.2f ",i,valuno[i].nota2); } } //Fim Do Codigo  
    • By marcelobragatf
      Preciso configurar um template para que exiba somente imagem destacada e titulo do post na página inicial do site. Dei uma olhada na documentação do template mas não consegui achar nada que ajudasse. Estou usando o tema Sparkling da Colorlib. Se puderem dar essa força agradeço
    • By willianvaneli
      Preciso enviar struct via winsock de um cliente em C para servidor em Python.
       
      to apanhando muito e já fiz diversas mudanças porém não consegui acertar. Resumindo estou completamente perdido.
      Fiz um cliente que salvava todas informações da estrutura em uma unica string e enviava .... deu tudo certo ... porém quando tento enviar a estrutura tudo cai em ruínas =õ(

      cliente em C:
       
      #include <stdio.h>
      #include <winsock.h>
      #include <conio.h>
      #include <windows.h>
      #include <string.h>
      //ESTRUTURA QUE CONTEM OS DADOS PARA ENVIAR PARA O SERVIDOR
      typedef struct Dados {
          int idMensagem;
          int umidade;
          int temperatura;
          char data[128];
          char confirmacao[2];
      }TDados,*PDados;

      //FUNCAO QUE GERA DADOS A SEREM ENVIADOS PARA O SERVIDOR
      TDados gera_dados(TDados dados){
          srand(time(NULL));
          dados.idMensagem++;
          dados.umidade=30+(rand() % 60);
          dados.temperatura=(rand() % 100)-50;
          strcpy(dados.confirmacao,"");
          /** Gera a data e hora atual:*/
          time(&dados.data);
          strftime(dados.data,sizeof(dados.data), "%H:%M:%S %A %d %b %Y \n", localtime(&dados.data));
          printf(dados.data);
          /*strcpy(dados.date,"Data: ");
          strcat(dados.date,__DATE__);
          strcat(dados.date," - Hora: ");
          strcat(dados.date,__TIME__);*/
          return dados;
      }
      int main(int argc,char *argv[]) {    
          //DECLARANDO VARIAVEIS
          WSADATA data;
          SOCKET winsock;
          SOCKADDR_IN sock;
          char strDados[1024];
          int bytes;
          TDados dados;
          PDados pdados;
          dados.idMensagem=0;
          int idCliente=5;
          while(1){
              //INICIALIZANDO WINSOCK
              if(WSAStartup(MAKEWORD(1,1),&data)==SOCKET_ERROR){
                  printf("Erro ao inicializar o winsock");
                  return 0;
              }
              //CRIANDO SOCKET
              if((winsock = socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR){
                  printf("Erro ao criar socket");
                  return 0;
              }
              //ESTRUTUDA DO SOCKET
              sock.sin_family=AF_INET;
              sock.sin_port=htons(5000);
              sock.sin_addr.s_addr=inet_addr("127.0.0.1");
              
              //GERANDO DADOS...
              printf("\n ------------GERANDO OS DADOS--------------- \n");
              dados=gera_dados(dados);
              //sprintf(strDados,"%d,%d,%d,%d,%s",idCliente,dados.idMensagem,dados.umidade,dados.temperatura,dados.date);
              //printf("\n ------------IMPRIMINDO OS DADOS--------------- \n");
              //printf(strDados);
              printf("\n --------------------------- \n");
              //CONEXAO COMO SERVIDOR, CASO NÃO SE CONECTE RETORNA ERRO
              if(connect(winsock,(SOCKADDR*)&sock,sizeof(sock))==SOCKET_ERROR){
                  printf("Erro ao se conectar");
                  return 0;
              }
              printf("Conectado!\n");    
              while(strcmp(dados.confirmacao,"ok")){
                  printf("Enviando Dados ao servidor!\n");
                  //ENVIANDO MENSAGEM
                  //char buffer[sizeof(Header)];(TDados*)
                  //memcpy(buffer, &header, sizeof(Header));
                  char* pdados= (PDados)malloc (sizeof(TDados)*1);   /// DEI MOLLOC PRA ENVIAR PELO WINSOCK
                  memcpy(pdados, &dados, sizeof(dados));               /// MEMCPY NEM SEI Q Q ISSO DIREITO USEI PQ MANDARAM
                  if(send(winsock,pdados,sizeof(dados),NULL) < 0){  /// ENVIANDO PELO WINSOCK
                      perror("Erro ao enviar a mensagem \n");
                      exit(1);
              }
                  //RECEBENDO CONFIRMACAO
                  printf("Recebendo resposta do servidor!\n");
                  memset(dados.confirmacao,0,2);
                  bytes=recv(winsock,dados.confirmacao,2,0);
                  if(bytes==-1){
                      printf("Conexão perdida");
                      getch();
                      return 0;
                  }else{
                      printf("\nMensagem Recebida %s \n",dados.confirmacao);
                  }
              }
              
              closesocket(winsock);
              //FAZ O PROGRAMA ESPERAR 30 SEGUNDOS PARA ENVIAR NOVA MENSAGEM
              Sleep(30000);
          }
          getch();
          closesocket(winsock);
          WSACleanup();
          return 0;
          
      }
       
      ------------------------------------------------------------------------------------------------------------------------------
      servidor em python ... NOTA : AINDA NÃO SEI RECEBER NA ESTRUTURA CORRETAMENTE.
       
      import base64
      # FUNCAO DE PERSISTENCIA
      def salvaLog(string):
          try:
              with open('log.txt','rt') as arq:
                  conteudo = arq.readlines()
                  if conteudo!="":
                      conteudo.append("\n")
                  conteudo.append(msg)
          except IOError:
              print('Arquivo não encontrado!')
          #~ arq=open('log.txt','rt',encoding="utf-8")
          #~ conteudo = arq.readlines()
          #~ if conteudo!="":
              #~ conteudo.append("\n")
              conteudo=msg
          arq=open('log.txt','wt',encoding="utf-8")
          arq.writelines(conteudo)
          arq.close()
      import struct
      idMensagem=0
      umidade=0
      temperatura=0
      data=b''
      confirmacao=b''

      import socket
      HOST = ''              # Endereco IP do Servidor
      PORT = 5000            # Porta que o Servidor esta
      tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      orig = (HOST, PORT)
      tcp.bind(orig)
      tcp.listen(5)
      while True:
          print ('Servidor Aberto\n')
          conexao, cliente = tcp.accept()
          print ('Conectado por', cliente)
          print ('Recebendo mensagem\n')
          msg = conexao.recv(142)
          print(len(msg))
          print (struct.calcsize('i i i 128s 2s'))
          print (msg)
          print(msg.decode())
          #~ msg= base64.decodebytes(msg)
          #~ print (msg)
          #~ print (msg.decode())
          cod = struct.unpack('i i i 128s 2s',msg)
          print (cod)
          (idMensagem,umidade,temperatura,data,confirmacao) = struct.unpack('i i i 128s 2s',msg)
          print ("Mensagem recebida, decodificando....\n")
          msg=msg.decode('UTF-8')
          print(msg)
          resposta='ok'
          conexao.send(resposta.encode())
          print ('\nSalvando em LOG as informacoes do cliente', cliente)
          salvaLog(msg)
          print ('\nFinalizando conexao do cliente', cliente)
          print("\n ----------------------------------------- \n")
          conexao.close()
       
    • By Manu Oliveira
      Vetor é um conjunto de variáveis subordinadas a um único nome e struct também é um conjunto de variáveis subordinadas a um único nome.  Meu professor pediu para diferencia -las. mais estou com dificuldade.
       
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.