1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: Entre as 13:00 e 15:00 (12:00 e 14:00 nos Açores) deste Sábado, 24 de Fevereiro, poderão haver períodos de inacessibilidade ao fórum e restantes sites da ZWAME (Comparador, Jogos, Portal, etc).
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

URGENTE!!!LINGUAGEM C

Discussão em 'Programação' iniciada por fabiopires1011, 10 de Fevereiro de 2018. (Respostas: 72; Visualizações: 1667)

  1. Código:
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /* 
     * File:   main.c
     * Author: Fábio Pires
     *
     * Created on 12 de Fevereiro de 2018, 18:18
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Metereologia { //Criação de um tipo de estrutura METEREOLOGIA
        float humidade;
        float temperatura;
        int dia;
        int mes;
        int ano;
    } METEREOLOGIA;
    
    typedef struct Cidade { //Criação de um tipo de estrutura CIDADE
        int id;
        int codigo;
        char nomecidade[50];
        char municipio[50];
        char distrito[50];
        METEREOLOGIA metereologia;
    } CIDADE;
    
    /*
     * 
     */
    
    void abrirficheiro() {      //função que imprime o ficheiro excel na tela
        char ficheiro[] = "cidades.csv", f;
        FILE *fch;
        fch = fopen(ficheiro, "r");
    
        if (fch == NULL)
            printf("Erro, nao foi possivel abrir o arquivo\n");
        else
            while ((f = fgetc(fch)) != EOF)
                putchar(f);
    
        fclose(fch);
    }
    
    introduzir(CIDADE *cidade, int pos) {    //função para introduzir dados 
        int i = 0;
        char caracter;
        printf("Indique o ID\n");
        scanf("%d",&cidade[pos].id);
        printf("Indique o código da cidade\n");
        scanf("%d", &cidade[pos].codigo);
        printf("Indique o nome da cidade\n");
        do {
            caracter = getchar();
            cidade[pos].nomecidade[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].nomecidade[i - 1] = '\0';
        printf("Indique o nome do municipio");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].municipio[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].municipio[i - 1] = '\0';
        printf("Indique o nome do distrito");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].distrito[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].distrito[i - 1] = '\0';
        printf("Indique a humidade em percentagem\n");
        scanf("%f", &cidade[pos].metereologia.humidade);
        printf("Indique a temperatura em ºC\n");
        scanf("%f", &cidade[pos].metereologia.temperatura);
        printf("Indique o dia\n");
        scanf("%d", &cidade[pos].metereologia.dia);
        printf("Indique o mês\n");
        scanf("%d", &cidade[pos].metereologia.mes);
        printf("Indique o ano\n");
        scanf("%d", &cidade[pos].metereologia.ano);
    
    }
    
    void editar(CIDADE *cidade,int pos){
        int n;
        printf("Indique o ID do registo que pretende alterar\n");
        scanf("%d",&n);
        for(int i=0;i<pos;i++){
            if(n==cidade[i].id){
                printf("Indique o novo valor da humidade\n");
                scanf("%f",&cidade[i].metereologia.humidade);
                printf("Indique o novo valor da temperatura\n");
                scanf("%f",&cidade[i].metereologia.temperatura);
                return;
            }
        }
                 printf("ID não encontrado\n");                                               
    }
    
    void remover(CIDADE *cidade,int pos){
        int n;
        printf("Indique o ID do registo que quer apagar");
    scanf("%d",&n);
    for(int i=0;i<pos;i++){
        if(n==cidade[i].id){
           
        }
       
    }
           
    
    }
    void menu() {
        CIDADE cidade[151];
        int escolha, posicao = 0;
        printf("Bem Vindo!Indique a operação que deseja realizar\n");
        do {
            printf(" 1-Consultar código das cidades\n 2-Introduzir informação\n 3-Alterar informação\n 4-Remover informação\n 5-Sair\n");
            scanf("%d", &escolha);
            switch (escolha) {
                case 1:
                    abrirficheiro();
                    break;
                case 2:
                    introduzir(cidade, posicao);
                    posicao++;
                    break;
                case 3:
                    editar(cidade,posicao);
                    break;
                case 4:
                    remover(cidade,posicao);
                    posicao--;
                    break;
    
            }
        } while (escolha != 5);
    }
    
    int main(int argc, char** argv) {
    
    
        menu();
        return (EXIT_SUCCESS);
    }
    
    Fiz este código até agora,só não sei o que por dentro do if da função remover.
    O enuncidado do exercicio e o seguinte

    A existência de bases de dados de informação meteorológica é de extrema importância , não apenas para uma análise histórica da metereologia mas tambem para permitir perceber os modelos metereologicos
    e fazer previsões.Estas previsoes ,por sua vez,podem condicionar atividades basicas como a agricultura , a proteçao civil ou a gestao/proteçao ambiental.Neste trabalho pretende-se o desenvolvimento de uma aplicaçao que permita o registo e consulta,ainda que de forma simplificada,da informaçao metereologica associada às cidades portuguesas.Juntamente com esta proposta é disponibilizado o ficheiro cidades.csv que contém,para cada uma das 151 cidades portuguesas,o seu código,municipio e distrito.A informaçao metereologica a modelar,descrita de seguida,deve estar associada ao codigo da cidade.Cada linha de informaçao meterolica é entao descrita por um codigo numerjck(qje deve ser unico), o id da cidade a que diz respeito,um valor de humidade(em percentagem),um valor da temperatura(em graus) e o dia ,mes e ano em que a informaçao foi recolhida.Num mesmo dia pode ser recolhida mais que uma linha de dados para uma mesma cidade.A aplicação a desenvolver deve ter no minimo as seguintes funcionalidades:
    • Permitir adicionar/editar/remover informação metereoligica
    • Guardar/carregar os dados metereologicos em/de ficheiro
    • Permitir pesquisar ao utilizador valores medios/maximos/minimos de temperatura e/ou humidade por cidade,numa data especifica ou intervalo de datas
    • Permitir ao utilizador exportar os resultados de pesquisas para um ficheiro .csv com a estrutura apropriada à pesquisa realizada
    • Permitir ao utilizador listar as cidades,municipios ou distritos para as quais existem dados metereologicos.
     
  2. Se fosse eu criava uma função int funcProcuraID(lista,id) que recebe uma lista e um ID e retorna o index desse id caso esse id exista na lista.
    -se existir retorna index
    -caso contrario retorna -1;
    Código:
    void remover(CIDADE *cidade,int pos){
        int n;
        printf("Indique o ID do registo que quer apagar");
    scanf("%d",&n);
    //vais usar a tua função procurar ID
    index=funcaoProcura(id,lista);
    if(index>=0){//existe registo
    for(int i=index;i<pos-1;i++){
      cidade[i]=cidade[i+1];
    }
    }else{
    printf(nao existe este ID...)}
    
    Eu não testei o código, mas julgo que funcione.
     
  3. o que e o index? e porque e que e pos-1?Reparei agora que no enunciado diz que o id e a mesma coisa que o codigo. Se cada cidade tem o seu codigo e posso ter mais de um registo para a mesma cidade no mesmo dia como e que faço a procura?
     
    Última edição: 13 de Fevereiro de 2018
  4. Index=indice do array
    pos-1 porque tu vais percorrer a lista até ao penúltimo elemento visto que apagas um elemento. Se fizeres um for normal x=0;x<pos;x++ ele da-te null point.
    Vou-te voltar a repetir tens que se mais especifico, eu e o resto da comunidade se não explicares ao certo a tua duvida é difícil quem esta deste lado adivinhar o que tu queres ao certo. Ok, queres procurar o que numa cidade? pessoas? tempo? datas? etc....
     
  5. acabei por dar um id ao registo e usa lo para a procura.
    o código está assim agora
    Código:
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /* 
     * File:   main.c
     * Author: Fábio Pires
     *
     * Created on 12 de Fevereiro de 2018, 18:18
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct Metereologia { //Criação de um tipo de estrutura METEREOLOGIA
        float humidade;
        float temperatura;
        int dia;
        int mes;
        int ano;
    } METEREOLOGIA;
    
    typedef struct Cidade { //Criação de um tipo de estrutura CIDADE
        int idregisto;
        int codigo;
        char nomecidade[50];
        char municipio[50];
        char distrito[50];
        METEREOLOGIA metereologia;
    } CIDADE;
    
    /*
     * 
     */
    
    void abrirficheiro() { //função que imprime o ficheiro excel na tela
        char ficheiro[] = "cidades.csv", f;
        FILE *fch;
        fch = fopen(ficheiro, "r");
    
        if (fch == NULL)
            printf("Erro, nao foi possivel abrir o arquivo\n");
        else
            while ((f = fgetc(fch)) != EOF)
                putchar(f);
    
        fclose(fch);
    }
    
    introduzir(CIDADE *cidade, int pos) { //função para introduzir dados num registo
        int i = 0;
        char caracter;
        printf("Indique que o identificador que pretende dar a este registo\n");
        scanf("%d", &cidade[pos].idregisto);
    
    
        printf("Indique o código da cidade\n");
        scanf("%d", &cidade[pos].codigo);
        getchar();
    
        printf("Indique o nome da cidade\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].nomecidade[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].nomecidade[i - 1] = '\0';
    
        printf("Indique o nome do municipio\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].municipio[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].municipio[i - 1] = '\0';
    
        printf("Indique o nome do distrito\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].distrito[i] = caracter;
            i++;
    
        } while (caracter != '\n');
        cidade[pos].distrito[i - 1] = '\0';
    
        printf("Indique a humidade em percentagem\n");
        scanf("%f", &cidade[pos].metereologia.humidade);
        printf("Indique a temperatura em ºC\n");
        scanf("%f", &cidade[pos].metereologia.temperatura);
        printf("Indique o dia\n");
        scanf("%d", &cidade[pos].metereologia.dia);
        printf("Indique o mês\n");
        scanf("%d", &cidade[pos].metereologia.mes);
        printf("Indique o ano\n");
        scanf("%d", &cidade[pos].metereologia.ano);
    
    }
    
    void editar(CIDADE *cidade, int pos) {    //função que permite modificar os dados de um registo
        int id;
        printf("Indique o identificador do registo que pretende alterar\n");
        scanf("%d", &id);
    
    
        for (int i = 0; i < pos; i++) {
            if (id == cidade[i].idregisto) {
                printf("Indique o novo valor da humidade\n");
                scanf("%f", &cidade[i].metereologia.humidade);
                printf("Indique o novo valor da temperatura\n");
                scanf("%f", &cidade[i].metereologia.temperatura);
                return;
            }
        }
        printf("ID não encontrado\n");
    }
    
    int procurarregistopeloid(CIDADE *cidade, int pos, int id) {       //Esta função irá procurar um registo através do identificador 
        for (int i = 0; i < pos; i++) {                                //previamente indicado pelo utilizador e caso seja encontrado um registo irá
            if (id == cidade[i].idregisto) {                           //devolver a posição que ele ocupa no vetor de estruturas criado.Caso nenhum
                return i;                                              //registo seja encontrado irá devolver o valor -1.
            }
        }
        return-1;
    }
    
    void remover(CIDADE *cidade, int pos, int begin) {   //função que permite remover um registo
        if (begin >= 0) {                               // Esta operaçao só se irá realizar caso o identificador tenha sido encontrado na funçao procrurarregistopeloid, pois caso
                                                       // este não tenha sido encontrado o valor retornado por essa função é -1, ou seja é menor que 0
            for (int i = begin; i < pos - 1; i++) {
                cidade[i] = cidade[i + 1];             //Por exemplo o utilizador escolheu remover o registo com o identificador 1290 e esse identificador foi encontrado
            }                                         //na posião 3 do vetor de estruturas,sendo que hipoteticamente este vetor tem capacidade para 5. O contéudo da posição 4 passa
        } else {                                      //para a posição 3 e o conteúdo da posição 5 passa para a posição 4,passando a existir apenas 4 posições preenchidas em vez das 5
            printf("Idenficador não encontrado\n");
        }
    }
    
    void menu() {
        CIDADE cidade[151];
        int escolha, posicao = 0, ident, inicio;
        printf("Bem Vindo!Indique a operação que deseja realizar\n");
        do {
            printf(" 1-Consultar código das cidades\n 2-Introduzir informação\n 3-Alterar informação\n 4-Remover informação\n5-Listar informação 6-Sair\n");
            scanf("%d", &escolha);
            switch (escolha) {
                case 1:
                    abrirficheiro();
                    break;
                case 2:
                    introduzir(cidade, posicao);
                    posicao++;
                    break;
                case 3:
                    editar(cidade, posicao);
                    break;
                case 4:
                    printf("Indique o identificador do registo que pretende remover\n");
                    scanf("%d", &ident);
                    inicio = procurarregistopeloid(cidade, posicao, ident);
                    remover(cidade, posicao, inicio);
                    posicao--;
                    break;
    
            }
        } while (escolha != 5);
    }
    
    int main(int argc, char** argv) {
        menu();
        return (EXIT_SUCCESS);
    }
    
    
    A minha dúvida agora é: quando aparece o menu de opções se introduzir uma letra o programa buga,há alguma maneira de corrigir isso? Um dos requisitos do programa é permitir ao utilizador listar as informações procurando atraves da cidade,municipio ou distrito mas nao sei se para fazer a procura posso usar if(stringinseridapeloutilizador==cidade.localidade) visto que se trata de strings e o metodo de verificar se elas sao iguais e diferente do que para numeros
     
  6. Tenho a seguinte função mas nao está a fazer os printf. Qual é o erro?
    Código:
    void listarcidade(CIDADE *cidade,char string[],int pos){
        int j=0,total=0;                                                                                   //Primeiramente irá ser verificado
        for(int i=0;i<pos;i++){                                                                            //se existem registos decidades com o nome igual à string
        while(cidade[i].nomecidade[j]==string[j]&& cidade[i].nomecidade[j]!='\0' && string[j]!='\0'){      //inserida pelo usuário e sempre que for encontrado um
            j++;                                                                                           //irá ser adicionado ao total. Caso o total seja superior a 0,  
          }                                                                                                // ou seja se existirem registos, estes iram ser imprimidos na tela
        if(cidade[i].nomecidade[j]==string[j]){
            total++;
        }
        }
        j=0;
        if(total>0){
         for(int i=0;i<pos;i++){
        while(cidade[i].nomecidade[j]==string[j]&& cidade[i].nomecidade[j]!='\0' && string[j]!='\0'){
            j++;
          }
        if(cidade[i].nomecidade[j]==string[j]){
            printf("Identificador do registo- %d\n",cidade[i].idregisto);
            printf("Código da cidade- %d\n",cidade[i].codigo);
            printf("Cidade- %s\n",cidade[i].nomecidade);
            printf("Município- %s\n",cidade[i].municipio);
            printf("Distrito- %s\n",cidade[i].distrito);
            printf("Valor da humidade em percentagem- %f\n",cidade[i].metereologia.humidade);
            printf("Valor da temperatura- %f ºC\n",cidade[i].metereologia.temperatura);
            printf("Dia- %d\n",cidade[i].metereologia.dia);
            printf("Mês- %d\n",cidade[i].metereologia.mes);
            printf("Ano- %d\n",cidade[i].metereologia.ano);
        }    
        }
       }else{
            printf("Não foram encontrados registos para esta cidade");
       }
    }
    
     
    Última edição: 14 de Fevereiro de 2018
  7. Boas tenho a seguinte função mas ela não está a fazer os printfs.Qual é o erro?
    Código:
    void listarcidade(CIDADE *cidade,char string[],int pos){
        int j=0,total=0;                                                                                   //Primeiramente irá ser verificado
        for(int i=0;i<pos;i++){                                                                            //se existem registos decidades com o nome igual à string 
        while(cidade[i].nomecidade[j]==string[j]&& cidade[i].nomecidade[j]!='\0' && string[j]!='\0'){      //inserida pelo usuário e sempre que for encontrado um
            j++;                                                                                           //irá ser adicionado ao total. Caso o total seja superior a 0,   
          }                                                                                                // ou seja se existirem registos, estes iram ser imprimidos na tela
        if(cidade[i].nomecidade[j]==string[j]){
            total++;
        }
        }
        j=0;
        if(total>0){
         for(int i=0;i<pos;i++){
        while(cidade[i].nomecidade[j]==string[j]&& cidade[i].nomecidade[j]!='\0' && string[j]!='\0'){
            j++;
          }
        if(cidade[i].nomecidade[j]==string[j]){
            printf("Identificador do registo- %d\n",cidade[i].idregisto);
            printf("Código da cidade- %d\n",cidade[i].codigo);
            printf("Cidade- %s\n",cidade[i].nomecidade);
            printf("Município- %s\n",cidade[i].municipio);
            printf("Distrito- %s\n",cidade[i].distrito);
            printf("Valor da humidade em percentagem- %f\n",cidade[i].metereologia.humidade);
            printf("Valor da temperatura- %f ºC\n",cidade[i].metereologia.temperatura);
            printf("Dia- %d\n",cidade[i].metereologia.dia);
            printf("Mês- %d\n",cidade[i].metereologia.mes);
            printf("Ano- %d\n",cidade[i].metereologia.ano);
        }     
        }
       }else{
            printf("Não foram encontrados registos para esta cidade");
       }
    }
    
     
  8. Boas, estou a tentar fazer com que caso o ID já exista o programa volte a pedir ao utilizador para introduzir outro. Tenho o codigo seguinte, so que o problema e que na primeira vez que introduzo um id ja existente ele pede um novo, mas se voltar a introduzir o mesmo ele ja aceita.Qual e o erro? pos e o numero total de registos existentes
    Código:
    printf("Indique que o identificador que pretende dar a este registo\n");
       scanf("%d",&n);
       for(int j=0;j<pos;j++){
       if(n==cidade[j].idregisto){
                   printf("Esse ID já existe.Por favor indique outro\n");
                   scanf("%d",&n);
                   break;
               }        
       }
       cidade[pos].idregisto=n;    
    
     
  9. rastiff

    rastiff Power Member

    Ele faz o printf que o ID já existe, introduzes novamente esse ID no scanf e sais do if e avanças o FOR para a posição seguinte do array. Isso vai ignorar que naquela posição existia já esse valor (porque não voltas a passar por aquela posição). É esse o erro. Neste caso acho que tens ciclos melhores que o FOR para gerir a coisa.

    Devias investir algum tempo a aprender a fazer traçagens. É muito útil (especialmente) nestes casos em que sabes exactamente em que bloco de código está o problema e muito mais rápido do que vir ao fórum e ter que esperar pela resposta.
     
  10. Então que ciclo uso? Podes mostrar um exemplo?
     
  11. Boas . Como é que passo isto para uma matriz?
    Código:
       printf("Identificador do registo- %d\n", cidade[i].idregisto);
                    printf("Código da cidade- %d\n", cidade[i].codigo);
                    printf("Cidade- %s\n", cidade[i].nomecidade);
                    printf("Município- %s\n", cidade[i].municipio);
                    printf("Distrito- %s\n", cidade[i].distrito);
                    printf("Valor da humidade em percentagem- %f\n", cidade[i].metereologia.humidade);
                    printf("Valor da temperatura- %f ºC\n", cidade[i].metereologia.temperatura);
                    printf("Dia- %d\n", cidade[i].metereologia.dia);
                    printf("Mês- %d\n", cidade[i].metereologia.mes);
                    printf("Ano- %d\n", cidade[i].metereologia.ano);
    
     
  12. wowmiguelfcp

    wowmiguelfcp Power Member

    Linha - cidade
    Colunas - os campos que estás a usar.

    int matriz[n_cidades][n_campos]
     
  13. rjSampaio

    rjSampaio Power Member

    @fabiopires1011
    é impressão minha ou todos os "trabalhos de casa" são urgentes para ti?
     
  14. e depois com dois ciclos for?
     
  15. wowmiguelfcp

    wowmiguelfcp Power Member

    Sim, o primeiro para as linhas, e dentro deste outro para as colunas.
     
  16. rastiff

    rastiff Power Member

    Usa um ciclo while.
    Deves saber usar, ninguém te vai pedir para resolveres exercícios em C com esses enunciados se ainda não tiveres passado pelos ciclos for e while... digo eu.
    Tenta ser mais pró-activo... é que não há assim tantos ciclos...

    se calhar "urgente" é para tentar que o pessoal aqui largue tudo e vá a correr responder :D
     
  17. estava a usar o do while para evitar estar a usar dois scanf
     
  18. Boas tenho os seguintes excertos de um código.A minha pergunta é :estou a utilizar bem a memória dinâmica?
    Código:
    //Criação de um tipo de estrutura METEREOLOGIA
    typedef struct Metereologia { 
        float humidade;
        float temperatura;
        int dia;
        int mes;
        int ano;
    } METEREOLOGIA;
    
    //Criação de um tipo de estrutura CIDADE
    typedef struct Cidade { 
        int idregisto;
        int codigo;
        char nomecidade[50];
        char municipio[50];
        char distrito[50];
        METEREOLOGIA metereologia;
    } CIDADE;
    
    Código:
    void introduzir(CIDADE *cidade, int pos,int quantidade) { 
        int i = 0,n;
        char caracter;
        if(pos<quantidade){
        printf("Indique o identificador que pretende dar a este registo\n");
        scanf("%d", &n);
        while(i<pos){   
            if (n==cidade[i].idregisto){
                printf("Esse ID já existe.Por favor indique outro\n");
                scanf("%d",&n);
                i=0;
            }else{
                i++;
            }
        }cidade[pos].idregisto=n;
        do{
        printf("Indique o código da cidade\n"); 
       scanf("%d", &cidade[pos].codigo);
       getchar(); 
    
    Código:
    void menu() {
        CIDADE *cidade;
        char escolha,escolha2,escolha3;
     int  posicao = 0, ident, inicio, i, total;
     unsigned int n;
    
     float totaltemperatura, totalhumidade, mediatemperatura, mediahumidade,menorhumidade,maiorhumidade,menortemperatura,maiortemperatura;
        float *ptotaltemperatura = &totaltemperatura;
        float *ptotalhumidade = &totalhumidade;
        float *pmaiorhumidade=&maiorhumidade;
        float *pmenorhumidade=&menorhumidade;
        float *pmaiortemperatura=&maiortemperatura;
        float *pmenortemperatura=&menortemperatura;
        char string[50], c;
        printf("Bem vindo!Indique quantos registos pretende adicionar\n");
        scanf("%u",&qntd);
    cidade=(CIDADE*)malloc(qntd*sizeof(CIDADE));
    
     
  19. Boas, tenho o seguinte código e queria gravar os dados que são inseridos num ficheiro csv. Tenho a seguinte dúvida: o ficheiro já tem de estar criado?
    Sei que para gravar no ficheiro tenho de abri lo com o fopen mas depois como é que faço para gravar?
    Código:
    printf("Indique o identificador que pretende dar a este registo\n");
        scanf("%d", &n);
        while(i<pos){   
            if (n==cidade[i].idregisto){
                printf("Esse ID já existe.Por favor indique outro\n");
                scanf("%d",&n);
                i=0;
            }else{
                i++;
            }
        }cidade[pos].idregisto=n;
        do{
        printf("Indique o código da cidade\n"); 
       scanf("%d", &cidade[pos].codigo);
       getchar(); 
        }while(cidade[pos].codigo<1 || cidade[pos].codigo>151);
        printf("Indique o nome da cidade\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].nomecidade[i] = caracter;
            i++;
        } while (caracter != '\n');
        cidade[pos].nomecidade[i - 1] = '\0';
        printf("Indique o nome do municipio\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].municipio[i] = caracter;
            i++;
        } while (caracter != '\n');
        cidade[pos].municipio[i - 1] = '\0';
        printf("Indique o nome do distrito\n");
        i = 0;
        do {
            caracter = getchar();
            cidade[pos].distrito[i] = caracter;
            i++;
        } while (caracter != '\n');
        cidade[pos].distrito[i - 1] = '\0';
        printf("Indique a humidade em percentagem\n");
        scanf("%f", &cidade[pos].metereologia.humidade);
        printf("Indique a temperatura em ºC\n");
        scanf("%f", &cidade[pos].metereologia.temperatura);
        do{
        printf("Indique o dia\n");
        scanf("%d", &cidade[pos].metereologia.dia);
        }while(cidade[pos].metereologia.dia<1 ||cidade[pos].metereologia.dia>31);
        do{
        printf("Indique o mês\n");
        scanf("%d", &cidade[pos].metereologia.mes);
        }while(cidade[pos].metereologia.mes<1 || cidade[pos].metereologia.mes>12);
        printf("Indique o ano\n");
        scanf("%d", &cidade[pos].metereologia.ano);
    
     

Partilhar esta Página