1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

URGENTE!!!LINGUAGEM C

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

  1. fabiopires1011

    fabiopires1011 Power Member

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

    Seeba Power Member

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

    fabiopires1011 Power Member

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

    Seeba Power Member

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

    fabiopires1011 Power Member

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

    Seeba Power Member

  7. fabiopires1011

    fabiopires1011 Power Member

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

    fabiopires1011 Power Member

    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");
       }
    }
    
     
  9. fabiopires1011

    fabiopires1011 Power Member

    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;    
    
     
  10. 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.
     
  11. fabiopires1011

    fabiopires1011 Power Member

    Então que ciclo uso? Podes mostrar um exemplo?
     
  12. fabiopires1011

    fabiopires1011 Power Member

    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);
    
     
  13. wowmiguelfcp

    wowmiguelfcp Power Member

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

    int matriz[n_cidades][n_campos]
     
  14. rjSampaio

    rjSampaio Power Member

    @fabiopires1011
    é impressão minha ou todos os "trabalhos de casa" são urgentes para ti?
     
  15. fabiopires1011

    fabiopires1011 Power Member

    e depois com dois ciclos for?
     
  16. wowmiguelfcp

    wowmiguelfcp Power Member

    Sim, o primeiro para as linhas, e dentro deste outro para as colunas.
     
  17. 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
     
  18. fabiopires1011

    fabiopires1011 Power Member

    estava a usar o do while para evitar estar a usar dois scanf
     
  19. fabiopires1011

    fabiopires1011 Power Member

    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));
    
     
  20. fabiopires1011

    fabiopires1011 Power Member

    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