Jump to content

struct: listar e adicionar


Recommended Posts

Posted

neste programa de uma base de dados meteorológicos permite adicionar  na mesma cidade e no mesmo dia + do que um dado de temperatura e humidade

tbm permite listar todas as cidades mas queria que apenas lista-se as cidades com dados meteorológicos mas aparece um erro :

error: invalid operands to binary != (have 'METEOROLOGIA {aka struct meteorologia}' and 'int')

#define TAM 40
/*
 * 
 */
//Registro da data
typedef struct data{
    unsigned short int dia,mes,ano;   
    
}DATA; 

typedef struct meteorologia{
    unsigned short int humidade;   
    short int temperatura;
    
}METEOROLOGIA; 

typedef struct cidade{ 
    unsigned short int id;
    char cidade[TAM];
    char concelho[TAM];
    char distrito[TAM];
    DATA dia,mes,ano;  
    METEOROLOGIA humidade, temperatura;
    
}CIDADE;
//Adicionar Informação Meteorologica
int adicionar_meteo(CIDADE *ap_cidade)
{
    printf("Escolha a cidade para adicionar informaçao: \n");
    
    Distrito(ap_cidade);
    printf("\nDigite a temperatura: \n");
    scanf("%i",ap_cidade[ap_cidade ->id].temperatura);
    printf("\nDigite a Humidade: \n");
    scanf("%i",ap_cidade[ap_cidade ->id].humidade);
    printf("\nDigite a data: (Dia/Mes/Ano) \n");
    scanf("%i,%i,%i",ap_cidade[ap_cidade ->id].dia,ap_cidade[ap_cidade ->id].mes,ap_cidade[ap_cidade ->id].ano);
}
//Editar Informação Meteorologica
int editar_meteo(CIDADE *ap_cidade)
{
    printf("Escolha a cidade para editar informaçao:\n");
    Distrito(ap_cidade);
      
}
//Remover Informação Meteorologica
int remover_meteo(CIDADE *ap_cidade)
{
    printf("Escolha a cidade para remover informaçao:\n");
    Distrito(ap_cidade);
}
//Listar cidades com dados meteorologicos
void listar(CIDADE *ap_cidade){
    int i=0;
    for(;i<=151;i++)
           if( ap_cidade[i].humidade != 0 && ap_cidade[i].temperatura != 0){
        printf("%hu - %s,%s,%s temperatura %i ºC ,Humidade %i %%,Data %i/%i/%i)\n",
                ap_cidade[i].id, ap_cidade[i].cidade, ap_cidade[i].concelho,
                ap_cidade[i].concelho ,ap_cidade[i].temperatura,ap_cidade[i].humidade,
                ap_cidade[i].dia,ap_cidade[i].mes,ap_cidade[i].ano);
           }
}  
Posted (edited)

Isso acontece porque creio que tenhas mal configurado os teus structs. Dentro do struct CIDADE tu queres guardar os valores da humidade e da temperatura. Agora, tu criaste um struct à parte chamado METEOROLOGIA e colocaste lá um unsigned short int humidade e um short int temperatura, e dentro do struct CIDADE o que fizeste foi colocar METEOROLOGIA humidade, temperatura, e depois onde dá o erro colocaste "if(ap_cidade.humidade != 0.....)" e isto dá erro pois simplesmente estás a ir dentro do struct CIDADE ao campo humidade que está como tipo de dados METEOROLOGIA e não como inteiro.

Então, ou simplesmente eliminas o struct METEOROLOGIA e colocas a humidade e a temperatura dentro do struct CIDADE com tipo de dados inteiro(ou short, unsigned, qualquer tipo de dados numéricos que te dê mais jeito), ou, caso queiras um array do tipo METEOROLOGIA dentro do struct CIDADE colocas dentro deste struct METEOROLOGIA dados[20](por exemplo), pois como está não está correto e é por isso que dá o erro a comparar.

Edited by thefirex

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
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.