Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pedroalves

[Resolvido] Função maior

Recommended Posts

não estou a conseguir que so mostre os 3 carros com o maior co2

segue-se o codigo

void maior(void){
      int i;
      int posicao;
      int C02;
      int cilindrada;
      int sair = 0;
      int maior=0;
      int j=0;
      char opcao;
      system("cls");
       for (i = 0; (i< Numero_carros) && (sair != 1); i++)
      {
          if(CARROS[i].C02>maior)
          {
          maior=CARROS[i].C02;
          
          
          
                        printf("******************************************************************************\n");     
                        printf(" OS CARROS COM MAIS CO2 FOI: MARCA: %s E MODELO: %s\n",CARROS[i].Marca,CARROS[i].Modelo,maior);
                        printf("******************************************************************************\n");
                        }
          
          }                                                                                                                   
                         fflush(stdin);  
        printf("******************************************************************************\n");        // imprime a biblioteca
        printf("\t\t (S) PARA SAIR.\n");
        printf("******************************************************************************\n");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 's':
            case 'S':
                sair = 1;
                break;    
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lugar-comum do fórum: não use fflush em buffer de entrada (comportamento indefinido segundo o ISO C).

O resto do programa também importa: você está ordenando o array? Porque qualquer valor de CO2 positivo vai ser impresso sem ordenação ou alguma outra forma de marcar a posição dos 3 mais poluentes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já disse: o comportamento disso segundo o padrão é indefinido. Tem um tópico enorme sobre essas coisas em C e muito material no google (inclusive sobre o tal void main que professor ensina a usar)

Compartilhar este post


Link para o post
Compartilhar em outros sites

segue-se o codigo todo

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // função para strings
#include <conio.h>
#define max 17 // o maximo de carros que pode  conter a estretura
#define FICHEIRO_CARROS "carros.gs" // define o nome do ficheiro 
// estrutura dos Carros
typedef struct 
{
int numero;        
char Marca[100];
char Modelo[100];
int C02;
char Matricula[100];
int cilindrada;
int potencia;
int Ano; 
int  count;
float media;
}t_carros;


t_carros CARROS[max];
int Numero_carros = 0; 
void menuprincipla(); // Menu Principal
char procurarbiblioteca(char Marca[]); // função para procurar o carros pela marca
void printbiblioteca(int posicao);
void criarbiblioteca(void);
void alterarbiblioteca(void);
void eliminarbiblioteca(void);
void listarbiblioteca(void);
void lerbiblioteca(void);
void gravabiblioteca(void);
void media(void );
void maior(void);
void maior2(void);
//****************************************************************************************************************
 //Menu principal
void menuprincipal()
{
 printf("\a\n");
    printf("\t\t                PROGRAMA DE MODELOS DE CARROS         \n");
    printf("\t\t******************************************************\n");  
    printf("\t\t*                   MENU PRINCIPAL                   *\n");
    printf("\t\t******************************************************\n");  
    printf("\t\t*            (C)   CRIAR MODELO DE CARROS            *\n");
    printf("\t\t******************************************************\n"); 
    printf("\t\t*            (A)   ALTERA OS MODELOS DO CARRO        *\n");
    printf("\t\t******************************************************\n");
    printf("\t\t*            (E)  ELIMINAR LISTA MODELOS             *\n");
    printf("\t\t******************************************************\n");
    printf("\t\t*            (M)     MEDIA DE CO2                    *\n");
    printf("\t\t******************************************************\n"); 
    printf("\t\t*            (L)   LISTAR TODOS O MODELOS DO CARRO   *\n");
    printf("\t\t******************************************************\n");
    printf("\t\t*            (F)   VER OS 3 MODELOS COM MAIS C02     *\n"); 
    printf("\t\t******************************************************\n");
    printf("\t\t*            (T)   VER OS MODELO COM MAIS CILINDRADA *\n"); 
    printf("\t\t******************************************************\n");
    printf("\t\t*            (Q)          QUIT                       *\n");
    printf("\t\t******************************************************\n"); 
    printf("\t\t*                        OPCAO:                      *\n");
    printf("\t\t******************************************************\n");
    printf("\t\t*          @SOFTWARE CRIADO POR PEDRO ALVES          *\n");
    printf("\t\t******************************************************\n");  
}
// Função que procura carros
//*************************************************************
char procurarbiblioteca(char Marca[])
{
    int i;
    int encontrei = 0;
    
    // procura o codigo ate encontrar ou ate ao final do vector
    for (i = 0; (i < Numero_carros) && (encontrei == 0); i++)
    {
        if (strcmp(CARROS[i].Marca,Marca)==0)
        {
            encontrei = 1;
              
        }
    }
    
    if (encontrei == 1) return (i-1);
    else return -1;                    
}
// Função que procura carros
//*************************************************************
char procurarbiblioteca2(char Marca[])
{
    int i;
    int encontrei = 0;
    
    // procura o codigo ate encontrar ou ate ao final do vector
    for (i = 0; (i < Numero_carros) && (encontrei == 0); i++)
    {
        if (strcmp(CARROS[i].Marca,Marca)==0)
        {
            encontrei = 1;
              
        }
    }
    
    if (encontrei == 1) return (i-1);
    else return -1;                    
}

// Funcão imprime biblioteca
//***********************************************************************//
void printbiblioteca(int posicao)
{

fflush(stdin);
                                 system("cls");
                                 
                                printf("\t_________________________________________________\n");
                                printf("\t\t       MARCA|%s| \n",CARROS[posicao].Marca);
                                printf("\t_________________________________________________\n");
                                printf("\t\t       MODELO|%s| \n",CARROS[posicao].Modelo);
                                printf("\t_________________________________________________\n");
                                printf("\t\t      QUANTIDADE DE CO2|%d| \n",CARROS[posicao].C02);
                                printf("\t_________________________________________________\n");
                                printf("\t\t       MATRICULA|%s| \n",CARROS[posicao].Matricula);
                                printf("\t_________________________________________________\n");
                                printf("\t\t       ANO|%d| \n",CARROS[posicao].Ano);
                                printf("\t_________________________________________________\n");
                                printf("\t\t       CILINDRADA|%d| Cm3 \n",CARROS[posicao].cilindrada);
                                printf("\t_________________________________________________\n");
                                printf("\t\t       POTENCIA|%d| CV\n",CARROS[posicao].potencia);
                                printf("\t_________________________________________________\n");
                                printf("\t          @SOFTWARE CRIADO POR PEDRO ALVES       \n");
                                printf("\t_________________________________________________\n");
                                printf("\n"); 
                                                               
                  }
                  
/*-------------------------------------------------------------------------*/
//Função que cria um novo dado
 void criarbiblioteca(void)
{
    char Marca[100];
    char Modelo[100];
    int C02; 
    char Matricula[100];
    int Ano;
    int cilindrada;
    int potencia;
    char  opcao;
    
    system("cls");  // limpar ecra
    
    // obter dados do biblioteca
    printf("Marca:");
    scanf("%s",Marca);
    fflush(stdin);
    
    // verificar se codigo ja existe?
    if (procurarbiblioteca(Marca) != -1)
    {printf("\7\n");
        printf("\n MARCA JA EXISTE.\n");
        printf("PRIMA ENTER PARA CONTINUAR.");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
    }
    else    // codigo nao existe (criar um nova biblioteca)
          {  int i,j;
          fflush(stdin);
                for(i=0;i<1;i++)
                {
                                for(j=0;j<1;j++)
                                {
      
                                                  fflush(stdin); 
                                                printf("INSIRA MODELO\n");
                                                fflush(stdin);
                                                scanf("%s",&(CARROS[Numero_carros].Modelo));
                                                /*if (procurarbiblioteca1(Modelo) != -1){
printf("\7\n");
        printf("\n Modelo JA EXISTE.\n");
        printf("PRIMA ENTER PARA CONTINUAR.");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        */
       // else{
                                                 printf("INSIRA A QUANTIDADE CO2\n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].C02));
                                                printf("INSIRA A MATRICULA \n");
                                                fflush(stdin);
                                                scanf("%s",&(CARROS[Numero_carros].Matricula));
                                                printf("INSIRA A ANO DE FABRICO \n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].Ano));
                                                printf("INSIRA A CILINDRADA DO CARRO\n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].cilindrada));
                                                 printf("INSIRA A POTENCIA DO CARRO\n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].potencia));
                                                }
}
        //}        
                strcpy(CARROS[Numero_carros].Marca, Marca);                             
                     CARROS[Numero_carros].count=0;
                                Numero_carros++;
                            
                   }                   
        }
        
        /*********************************************************************************/
        //Altera o Dados do Carro
        void alterarbiblioteca(void)
{
    char  Marca[100];
    char  Modelo[100];
    int   C02; 
    char  Matricula[100];
    int   Ano;
    int cilindrada;
    int potencia;
    int   posicao;
    char  opcao;
    
    system("cls");  // limpar ecra
    
    // obter dados da biblioteca
    printf("MARCA:\n ");
    scanf("%s", Marca);
    fflush(stdin);
    
    // verificar se codigo existe?
    posicao = procurarbiblioteca(Marca);
    if (posicao == -1)
    {
        printf("\nMARCA NAO EXISTE\n");
        printf("PRIMA ENTER PARA CONTINUAR.");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
    }
    else    // numero existe (alterar a biblioteca)
    {
        printf("\n");
        printbiblioteca(posicao);
        printf("\nNOVO DADOS:\n\n");
         int i,j;
                printf("INSIRA MARCA\n");
                fflush(stdin);
                gets(Marca);
                                                printf("INSIRA MODELO\n");
                                                fflush(stdin);
                                                scanf("%s",&(CARROS[posicao].Modelo));
                                                 printf("INSIRA A QUANTIDADE CO2\n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[posicao].C02));
                                                printf("INSIRA A ANO DE FABRICO \n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[posicao].Ano));
                                                printf("INSIRA A MATRICULA \n");
                                                fflush(stdin);
                                                scanf("%s",&(CARROS[posicao].Matricula));
                                                 printf("INSIRA A CILINDRADA DO CARRRO \n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].cilindrada));
                                                 printf("INSIRA A POTENCIA DO CARRO \n");
                                                fflush(stdin);
                                                scanf("%d",&(CARROS[Numero_carros].potencia));
               
     //    alterar biblioteca no vector "carrros"
        strcpy(CARROS[posicao].Marca, Marca);
               }
                                }

//---------------------------------------------------------------------------------------------------------------//    
//função para eliminar os dados
void eliminarbiblioteca(void)
{
    int   numero;
    int   posicao;
    char  Marca[100];
    char Modelo[100];
    int C02; 
    char Matricula[100];
    int Ano;
    int cilindrada;
    int potencia;
    char opcao;
    int i;
    int confirma;
    
    system("cls");  // limpar ecra
    
    // obter dados da biblioteca
    printf("NOME DA MARCA:\n ");
    scanf("%s", Marca);
    fflush(stdin);
    
    // verificar se biblioteca existe?
    posicao =  procurarbiblioteca(Marca);
    if (posicao == -1)
    {
        printf("\nMARCA  NAO EXISTE.\n");
        printf("PRIMA ENTER PARA CONTINUAR.");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
    }
    else    // codigo existe (eliminar carros)
    {
        printf("\n");
     printbiblioteca(posicao);   // imprime biblioteca
        printf("\t\tENTER PARA CONFIRMAR, (C) PARA CANCELAR.\n");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 'c':
            case 'C':
                confirma = 0;
                break;
            default:
                confirma = 1;
        }
        
      if (confirma != 0)  // confirma eliminacao
        {
            // eliminar espacos
            for (i = posicao; i < Numero_carros; i++)
            {
          
                strcpy(CARROS[i].Marca, CARROS[i+1].Marca);
            }
      
            // actulizar numero de Carros
        
          Numero_carros--;
        
        }
      
        }
    }
//---------------------------------------------------------------//    
// função que lista os dados    
void listarbiblioteca(void)
{
    int i;
    int sair = 0;
    char opcao;
    
    system("cls");  // Limpa ecra
    for (i = 0; (i < Numero_carros) && (sair != 1); i++)
    {
        printbiblioteca(i); 
        printf("******************************************************************************\n");        // imprime a biblioteca
        printf("\t\t ENTER PARA CONTINUAR, (S) PARA SAIR.\n");
        printf("******************************************************************************\n");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 's':
            case 'S':
                sair = 1;
                break;
        }
    }
}
//*********************************************************************************************************************************
                      // Função que Calcula a Media
                      void media(void){
                      int numero;
                      float media1=0;
                      int C02=0;
                      int soma=0;
                      int i=0;
                      int sair = 0;
                      char opcao;
                      fflush(stdin);
                      system("cls");
 
                      for (i = 0; (i < Numero_carros) && (sair != 1); i++)
                            {   
                            soma=(soma+CARROS[i].C02);
                            }
                            media1=soma/Numero_carros;
                            printf("A MEDIA DO C02 e %0.2f\n",media1);
                            printf("******************************************************************************\n");        // imprime a biblioteca
                            printf("\t\t CARREGA EM ENTER PARA SAIR.\n");
                            printf("******************************************************************************\n");
                            scanf("%c", &opcao);    // le opcao
                            fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 's':
            case 'S':
                sair = 1;
                break;
        }
     }
     
     
    // Le maior numero Co2      
 /*--------------------------------------------------------*/

      void maior(void){
      int i;
      int posicao;
      int C02;
      int cilindrada;
      int sair = 0;
      int maior=0;
      int j=0;
      char opcao;
      system("cls");
       for (i = 0; (i< Numero_carros) && (sair != 1); i++)
      {
          if(CARROS[i].C02>maior)
          {
          maior=CARROS[i].C02;
          
          
          
                        printf("******************************************************************************\n");     
                        printf(" OS CARROS COM MAIS CO2 FOI: MARCA: %s E MODELO: %s\n",CARROS[i].Marca,CARROS[i].Modelo,maior);
                        printf("******************************************************************************\n");
                        }
          
          }                                                                                                                   
                         fflush(stdin);  
        printf("******************************************************************************\n");        // imprime a biblioteca
        printf("\t\t (S) PARA SAIR.\n");
        printf("******************************************************************************\n");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 's':
            case 'S':
                sair = 1;
                break;    
}
}
// Funcão ve a o carro que tem mais cilindrada
///*****************************************************************************************************************************************
      void maior2(void){
      int i;
      int posicao;
      int C02;
      int cilindrada;
      int sair = 0;
      int maior=0;
      char opcao;
                                       
                         for (i = 0; (i< Numero_carros) && (sair != 1); i++)
                         {
                             
                             if(CARROS[i].cilindrada>maior)
                              {
                               maior=CARROS[i].cilindrada;
                               system("cls");  
                               printf("*******************************************************************************\n"); 
                               printf(" O CARRO COM MAIS CILINDRADA FOI: MARCA: %s E MODELO: %s\n",CARROS[i].Marca,CARROS[i].Modelo);
                               printf("*******************************************************************************\n"); 
                               }
                               }
        printf("******************************************************************************\n");        // imprime a biblioteca
        printf("\t\t (S) PARA SAIR.\n");
        printf("******************************************************************************\n");
        scanf("%c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
            case 's':
            case 'S':
                sair = 1;
                break;
        }
                               
}
//******************************************************************************************
 // Função le a bliblioteca                 
void lerbiblioteca(void)
{
    FILE *fp;
    int i;
    char opcao;
    
     

    // abrir ficheiro para leitura
    fp = fopen(FICHEIRO_CARROS, "rb");
    
    if (fp != NULL)     // ficheiro existe
    {
        // posicao inicial
        i = 0;
        // le a estretura  1 a 1
       while (fread(&CARROS[i], sizeof(t_carros), 1, fp) == 1)
        {    
            i++;
            Numero_carros++;
        }
     fclose(fp);
     }}
     
 //------------------------------------------------------------------------        
// função que grava dados inseridos, alterados ou eliminados na biblioteca 
void gravabiblioteca(void)
{
    FILE *fp;
    char opcao;
            

    // abrir ficheiro para leitura
    fp = fopen(FICHEIRO_CARROS, "wb");
    
    if (fp != NULL)     // ficheiro existe
    {
        if (fwrite(&CARROS, sizeof(t_carros), Numero_carros, fp) !=Numero_carros)
        {
            printf("\nERRO NA GRAVACAO PRIMA ENTER PARA CONTINUAR.\n");
            scanf("%c", &opcao);    // le opcao
            fflush(stdin);          // limpa o buffer do teclado
        }                 
        fclose(fp);     // fechar ficheiro
    }
}
//----------------------------------------------------------------------------------------------------------------
//Funcão principal
main(){
          int continuar = 1;
    char opcao;
lerbiblioteca(); 
    do
    {
        system("cls");          // limpa ecra
        menuprincipal();
        fflush(stdin);                // apresenta o menu principal
        scanf(" %c", &opcao);    // le opcao
        fflush(stdin);          // limpa o buffer do teclado
        
        switch(opcao)
        {
           case 'c':
            case 'C':
                criarbiblioteca();// cria um novo dado na biblioteca
                break;
            case 'a':
            case 'A':
               alterarbiblioteca(); //altera o dado pretendido na biblioteca
               break;
               
            case 'e':
            case 'E':
               eliminarbiblioteca();//elimina o dado pretendido na biblioteca
                break;
           case  'm': 
           case  'M':
                media(); // chama a função media
                break;
            case 'l':
            case 'L':
               listarbiblioteca(); // faz a listagem de um dado 1 a 1
                break;
           case 'f':
           case 'F':
           maior();// chama a função maior carro com C02
            break;
            case 't':
            case 'T':
           maior2(); // chama função que calcula carro com o maior cilindrada
            break;
            case 'q':
            case 'Q':
                continuar = 0;
                break;
            default:
                printf("\n\nOPCAO ERRADA: PRIMA ENTER PARA CONTINUAR!\n");
                scanf("%c", &opcao);
                fflush(stdin);
        }
    } while(continuar != 0);
      gravabiblioteca();//invoca a funcão gravar
       return 0;
       }

a onde esta o meu erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lugar-comum do fórum: não use fflush em buffer de entrada (comportamento indefinido segundo o ISO C).

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.