Mudanças entre as edições de "Equipe3-2015-1"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 176: Linha 176:
  
 
_____________________________________________________________________________________________________________________________
 
_____________________________________________________________________________________________________________________________
include <stdio.h>
+
#include <stdio.h>
 
#include <stdlib.h>
 
#include <stdlib.h>
 
#include <string.h>
 
#include <string.h>
 
   
 
   
/*Estrutura para o arquivo*/
+
#define FIM 5
typedef struct TLocalidade localidade;
+
 +
typedef struct Tlocalidade localidade;
 +
 +
struct TLocalidade {
 +
  char nome[20];
 +
  int codigo;
 +
  float temp;
 +
  int umidade;
 +
  localidade *proximo;
 +
} *tail;
 +
 +
void listar_temperatura_por_cidade()
 +
{
 +
 
 +
char nome[20];
 +
    localidade *pa,*pp;
 +
    pa=tail;
 +
    pp=tail->proximo;
 +
    scanf("%s",nome);
 +
   
 +
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
 +
    pa=pp;
 +
    pp=pp->proximo;
 +
    }
 +
   
 +
    if (pp!=NULL){
 +
    printf("Nome: %s\n codigo: %d\n temperatura: %f\n umidade: %d\n", pp->nome, pp->codigo, pp->temp, pp->umidade);
 +
}
 +
}
 +
 +
void remover_cidade()
 +
{
 +
  char nome[20];
 +
    localidade *pa,*pp;
 +
    pa=tail;
 +
    pp=tail->proximo;
 +
    scanf("%s",nome);
 +
   
 +
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
 +
    pa=pp;
 +
    pp=pp->proximo;
 +
    }
 +
   
 +
    if (pp!=NULL){
 +
    pa->proximo=pp->proximo;
 +
    free(pp);
 +
    }
 +
}
 +
 +
void inserir_cidade()
 +
{
 +
 +
    localidade *inserir=(localidade*) malloc(sizeof(localidade));
 +
    printf("Digite o nome: ");
 +
    scanf("%s",inserir->nome);
 +
    printf("Digite o codigo: ");
 +
    scanf("%s",inserir->codigo);
 +
    printf("Digite a temperatura: ");
 +
    scanf("%s",inserir->temp);
 +
    printf("Digite a umidade: ");
 +
    scanf("%s",inserir->umidade);
 +
 
 +
    if (tail==NULL){
 +
        tail=inserir;
 +
    }
 +
        else{
 +
            inserir->proximo=tail->proximo;
 +
            tail->proximo=inserir;
 +
            }
 +
}
 +
 +
void listar_todos()
 +
{
 +
 
 +
 +
localidade *p;
 +
  for (p = tail; p != NULL; p = p->proximo)
 +
 
 +
      printf("Nome: %s | codigo: %d | temperatura: %f | umidade: %d\n", p->nome,p->codigo,p->temp,p->umidade);
 +
     
 +
}     
 +
   
 +
void main()
 +
{
 +
  int opcao;
 +
 +
  tail=NULL;
 +
 +
  do {
 +
    printf("1-Listar por nome\n 2-Remover cidade\n 3-Inserir cidade\n 4-Listar todos\n 5-FIM\n");
 +
    scanf("%d", &opcao);
 +
    switch(opcao) {
 +
    case 1: listar_temperatura_por_cidade();
 +
            break;
 +
    case 2:
 +
            remover_cidade();
 +
            break;
 +
    case 3:
 +
            inserir_cidade();
 +
            break;
 +
    case 4:
 +
            listar_todos();
 +
            break;
 +
    default:
 +
            break;
 +
    }
 +
  } while(opcao!=FIM);
 +
}
 +
 
 +
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 +
#include <stdio.h>
 +
#include <stdlib.h>
 +
#include <string.h>
 +
 +
#define FIM 5
 +
#define BUFFER 64
  
struct TLocalidade{
+
typedef struct TLocalidade {
 +
  char nome[20];
 
   int codigo;
 
   int codigo;
  char nome[40];
 
 
   float temp;
 
   float temp;
 
   int umidade;
 
   int umidade;
   localidade *prox;
+
   struct TLocalidade *proximo;
}*tail;
+
} Dados;
 +
 
 +
//Funções para manusear os dados (irão retornar dados)
 +
Dados *inicia_dados  (char *nome, int idade);
 +
Dados *insere_dados  (Dados *dados, char *nome, int idade);
 +
Dados *delbusca_dados(Dados *dados, char *chave);
 +
Dados *deleta_dados  (Dados *dados, int nTipo);
 +
int  checa_vazio    (Dados *dados);
 +
 +
//Funções para mostrar dados
 +
void  exibe_dados    (Dados *dados);
 +
void  exibe_tamanho  (Dados *nova);
 +
void  busca_dados    (Dados *dados, char *chave);
 +
 
 +
//Inicializando os dados da lista
 +
Dados *principal = NULL;
 +
 +
void remover_cidade()
 +
{
 +
    char *chave;
 +
    //Se não estiver vazio
 +
    if (!checa_vazio(principal)) {
 +
        chave = (char *)malloc(BUFFER);
 +
        //Armazenando o valor digitado
 +
        fprintf(stdout, "Digite o nome para buscar: \n--> ");
 +
        scanf("%s", chave);
 +
        //Deletando a chave buscada
 +
        principal = delbusca_dados(principal, chave);
 +
    }
 +
}
 +
 
 +
Dados *delbusca_dados(Dados *dados, char *chave) {
 +
    int achou=0,cont=0;
 +
    Dados *juntou, *aux, *nova=dados;       
 +
 +
    //Correndo a lista e verificando se encontrou a string buscada, se sim, aumenta o contador e seta a variável de busca
 +
    for (; nova != NULL; nova = nova->proximo) {
 +
        if (strcmp(chave, nova->nome) == 0) {
 +
            achou=1;
 +
            cont++;
 +
        }
 +
    }
 +
 +
    //Se encontrou a busca
 +
    if(achou==1){
 +
        int ind=0;
 +
        //Correndo a lista
 +
        for(ind=0;ind<cont;ind++){
 +
            //Se encontrou na primeira casa apaga a primeira casa
 +
            if(strcmp(chave,dados->nome)==0){
 +
                aux=dados;
 +
                dados=dados->proximo;
 +
                free(aux);
 +
            }
 +
            //Senão, procura até encontrar
 +
            else{
 +
                aux=dados;
 +
                //Posiciona na frente do encontro para exclusão
 +
                while(strcmp(chave,aux->nome)!=0){
 +
                    aux=aux->proximo;
 +
                }
 +
 +
                juntou=dados;
 +
                //Enquanto o auxiliar juntou for diferente do posicionado para exclusão
 +
                while(juntou->proximo!=aux){
 +
                    juntou=juntou->proximo;
 +
                }
 +
                //Aponta para o próximo valor válido
 +
                juntou->proximo=aux->proximo;
 +
 +
                free(aux);
 +
            }
 +
        }
 +
        fprintf(stdout, "Excluido.\n");
 +
    }
 +
    else
 +
        fprintf(stdout, "Nenhum resultado encontrado.\n");
 
   
 
   
void Tcadastro(){
+
    getchar();
  localidade *cadastro;
+
    return dados;
  cadastro =(localidade *) malloc(sizeof(localidade));
+
}
  printf("\n Insira o codigo desejado para a cidade\n");
 
  gets(cadastro->codigo);
 
  printf("\n Insira o nome da cidade\n");
 
  gets(cadastro->nome[40]);
 
  printf("\n Insira a temperatura da cidade\n");
 
  gets(cadastro->temp);
 
  printf("\n Insira a umidade\n");
 
  gets(cadastro->umidade);
 
  };
 
 
 
void Tremover(){
 
  int cdg;
 
  localidade *pa,*pp;
 
  pa=tail;
 
  pp=tail->prox;
 
  scanf("%s", cdg);
 
 
   
 
   
  while(pp!=NULL && strcmp(pp->codigo,cdg)!=0){
+
//Função que testa se a lista esta vazia
  pa=pp;
+
int checa_vazio(Dados *dados) {
  pp=pp->prox;
+
    //Se a lista estiver vazia
  }
+
    if (dados == NULL) {
 +
            fprintf(stdout, "Lista vazia!\n");
 +
            getchar();
 +
            return 1;
 +
    } else
 +
            return 0;
 +
}
 
   
 
   
  if (pp!=NULL){
+
void lista_vazia(void)
  pa->prox=pp->prox;
+
{
  free(pp);
+
    char *nome;
  }
+
    int codigo, umidade;
};
+
    float temp;
 +
    //Alocando dados para uma String
 +
    struct TLocalidade *inserir=(char*) malloc(BUFFER);
 +
    //Lendo String Nome
 +
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
 +
    scanf("%s", nome);
 +
    fprintf(stdout, "\n");
 +
    //Lendo int codigo
 +
    fprintf(stdout, "Digite o Codigo: \n----> ");
 +
    scanf("%d", &codigo);
 +
    fprintf(stdout, "\n");
 +
    //Lendo float temp
 +
    fprintf(stdout, "Digite a Temperatura: \n----> ");
 +
    scanf("%d", &temp);
 +
    fprintf(stdout, "\n");
 +
    //Lendo int umidade
 +
    fprintf(stdout, "Digite a umidade: \n----> ");
 +
    scanf("%d", &umidade);
 +
    fprintf(stdout, "\n");
 +
    //Lançando os dados lidos na lista Principal
 +
    free(principal);
 +
    principal = inicia_dados(nome, codigo, temp, umidade);
 +
}
 +
 
 +
Dados *inicia_dados(char *nome, int codigo, float temp, int umidade)
 +
{
 +
    Dados *novo;
 +
    //Alocando memória para a posição atual da lista
 +
    novo = (Dados *)malloc(sizeof(Dados));
 +
    //Lançando os dados lidos
 +
    novo->nome = (char *)malloc(strlen(nome)+1);
 +
    strncpy(novo->nome, nome, strlen(nome)+1);
 +
    novo->codigo = codigo;
 +
    novo->temp = temp;
 +
    novo->umidade = umidade;
 +
    //Apontando para a próxima posição da lista
 +
    novo->proximo = NULL;
 +
    return novo;
 +
}
 +
 
 +
void inserir_cidade()
 +
{
 +
    char *nome;
 +
    int codigo, umidade;
 +
    float temp;
 +
    //Alocação de espaço para String Nome
 +
    nome = (char *)malloc(BUFFER);
 +
    //Armazenando String Nome
 +
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
 +
    scanf("%s", nome);
 +
    fprintf(stdout, "\n");
 +
    //Armazenando Int codigo
 +
    fprintf(stdout, "Digite o codigo: \n----> ");
 +
    scanf("%d", &codigo);
 +
    fprintf(stdout, "\n");
 +
    //Lendo float temp
 +
    fprintf(stdout, "Digite a Temperatura: \n----> ");
 +
    scanf("%d", &temp);
 +
    fprintf(stdout, "\n");
 +
    //Lendo int umidade
 +
    fprintf(stdout, "Digite a umidade: \n----> ");
 +
    scanf("%d", &umidade);
 +
    fprintf(stdout, "\n");
 +
    //Criando listas auxiliares       
 +
    Dados *final,*aux;
 +
    //Alocando dados para a posição final da lista
 +
    final = (Dados *)malloc(sizeof(Dados));
 +
    //Setando os valores
 +
    final->nome = (char *)malloc(strlen(nome)+1);
 +
    strncpy(final->nome, nome, strlen(nome)+1);
 +
    final->codigo = codigo;
 +
    final->temp = temp;
 +
    final->umidade = umidade;
 +
    //A pŕoxima posição será Nulo
 +
    final->proximo=NULL;
 +
    //A lista auxiliar será igual a Principal
 +
    aux=principal;
 +
    //Enquanto o próximo de auxiliar não for Nulo
 +
    while(aux->proximo!=NULL){
 +
        aux=aux->proximo;
 +
    }
 +
    //O último valor, será Nulo, e depois apontando para
 +
    //o Final
 +
    aux->proximo=NULL;
 +
    aux->proximo=final;
 +
}
  
void Timprimir(){
 
  localidade *p;
 
  for(p=tail;p!=NULL;p=p->prox){
 
  printf("\n %d %s %d %f\n\t",p->codigo, p->nome, p->temp, p->umidade);
 
  }
 
};
 
void Tlerarquivos(){
 
 
   
 
   
};
+
void listar_todos()
 +
{
 +
    fprintf(stdout, "Cadastro:\n\n");
 +
    fprintf(stdout, "------------------------\n");
 +
    //Exibindo todos os valores da lista
 +
    for (; Dados != NULL; Dados = Dados->proximo) {
 +
        fprintf(stdout, "Nome: %s\n Codigo: %d\n Temperatura: %d\n Umidade: %d\n",Dados->nome, Dados->codigo, Dados->temp, Dados->umidade);
 +
        fprintf(stdout, "------------------------\n");
 +
    }
 +
    getchar();
 +
}     
 +
   
 +
void main()
 +
{
 +
  lista_vazia();   
 +
  int opcao;
 
   
 
   
void main(){
 
 
  char opcao;
 
 
   do {
 
   do {
  printf("Entre com uma opção\n 1-Cadastro\n 2-Remover cadastro\n 3-Imprimir\n 4-Ler Arquivos 5-Sair\n");
+
    printf("1Remover cidade\n 2-Inserir cidade\n 3-Listar todos\n 4-FIM\n");
  scanf ("%d",&opcao);
+
    scanf("%d", &opcao);
  switch(opcao) {
+
    switch(opcao) {
  case 1:
+
    case 1:
          Tcadastro();
+
            remover_cidade();
          break;  
+
            break;
  case 2:
+
    case 2:
          Tremover();
+
            inserir_cidade();
          break;
+
            break;
  case 3:
+
    case 3:
          Timprimir();
+
            listar_todos();
          break;
+
            break;
  case 4:
+
    default:
          Tlerarquivos();
+
            break;
          break;
+
    }
  case 5:
+
  } while(opcao!=FIM);
          printf("Saindo");
 
          break;
 
  default:
 
          printf("opcao default\n");
 
          break;  
 
  }
 
} while(opcao!="FIM");
 
 
}
 
}
 +
 +
  
 
</syntaxhighlight>
 
</syntaxhighlight>

Edição das 21h18min de 22 de junho de 2015

Integrantes

DANIEL CABRAL CORREA

PABLO FIDELIS DIAS

PAULO HENRIQUE HORST BIANCHIN


Descrição da atividade principal

Um sistema de aquisição recebe, a cada final do dia, um arquivo de dados contendo informações sobre a temperatura (°C) e a umidade relativa do ar (%) de determinadas localidades do auto Amazonas. Implemente um sistema que importe esses arquivos e atualize os dados de temperatura e umidade de todas as localidades cadastradas. No entanto, é preciso ter um cadastro de localidades com seus respectivos códigos. A cada dia, ou seja, a cada arquivo lido, é preciso apresentar na tela a amplitude térmica da região, indicando temperaturas mínimas, médias e máximas . Portanto é preciso cadastrar novas localidades, remover localidades e imprimir a lista dessas localidades. O sistema deve conter um menu de opções para realizar as atividades, em loop contínuo e com opção para sair.

Descrição da atividade específica

Fazer uso
  1. Comando swith
  2. Lista encadeada
  3. Ponteiros
  4. Alocação Dinâmica de Memória
  5. Funções para tratamento de arquivo


Exemplo da estrutura (encadeada)
struct TLocalidade{
  int codigo;
  char nome[40];
  float temp_media;
  float temp_media;
  struct TLocalidade *prox;
};
Exemplo de arquivo (localidades.dat)
cat localidades.dat
100 XINGU 23.5 80
200 SOLIMOES 24.8 81
300 IAPOQUE 32.0 75
400 MADEIRA 33.9 98
500 BELLOMONTE 40.5 90
Exemplo dos dados coletados (dados1.dat)
cat dados1.dat
100 29.0 89
200 25.3 88
300 35.1 90
400 35.3 100
500 32.0 100
Exemplo dos dados coletados (dodos2.dat)
cat dodos2.dat
100 39.4 100
200 35.3 78
300 26.9 70
400 33.5 71
500 41.2 93

[...]

Atividades

Distribuição

Aula 6, 9, 19, 20, 22;

Desenvolvimento

Cadastro/Remover - Lista ligada (*pTLocalidade) - Malloc()

Média de temperatura - (Temp1+Temp2+....+TempN)/N = Temp média

Organizar lista da temperatura maior p/ menor.

Conclusão

Código fonte

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Estrutura para o arquivo*/
struct TLocalidade{
  int codigo;
  char nome[40];
  float temp;
  int umidade;
  struct TLocalidade *prox;
}*head,*tail,*aux;

struct Tcadastro (int codigo, char nome[40], float temp);{
  TLocalidade cadastro*();
  int cdg;
  char nme[40];
  cadastro = (TLocalidade*) malloc(sizeof(TLocalidade));
  printf("\n Insira o codigo desejado para a cidade\n");
  scanf("%s",cdg);
  if(strcmp(cdg,TLocalidade.codigo)==0){
  printf("Este codigo ja esta sendo utilizado");
  break;
  }
  else{
  strcpy(cdg,cadastro->codigo);
  }
  printf("\n Insira o nome da cidade\n");
  scanf("%s",nme);
  if(strcmp(nme,TLocalidade.codigo)==0){
  printf("Este nome ja esta sendo utilizado");
  break;
  }
  else{
  strcpy(nme,cadastro->nome);
  }
  printf("\n Insira a temperatura da cidade\n");
  scanf("%s",tmp);
  printf("\n Insira a umidade\n");
  scanf("%s",cadastro->umidade);
  free()
  };
struct Tremover{
  int cdg;
  TLocalidade *pa,*pp;
  pa=tail;
  pp=tail->proximo;
  scanf("%s", cdg);
    
  while(pp!=NULL && strcmp(pp->codigo,cdg)!=0){
  pa=pp;
  pp=pp->proximo;
  }
    
  if (pp!=NULL){
  pa->proximo=pp->proximo;
  free(pp);
  }
};
struct Timprimir{
   TLocalidade *p;
   for(p=tail;p!=NULL;p=p->prox){
   printf("\n %d %s %d %f\n\t",p->código, p->nome, p->temp, p->umidade);
   }
};
struct Tlerarquivos{
   
};

void main(){

  int opcao;
  printf("Entre com uma opção\n 1-Cadastro\n 2-Remover cadastro\n 3-Imprimir\n 4-Ler Arquivos 5-Sair\n");
  scanf ("%d",&opcao);
  switch(opcao) {
  case 1:
          Tcadastro;
          break; 
  case 2:
          Tremover;
          break;
  case 3:
          Timprimir;
          break; 
  case 4: 
          Tlerarquivos;
          break;
  case 5:
          printf("Saindo");
          break;
  default:
          printf("opcao default\n");
          break;    
  }

}


_____________________________________________________________________________________________________________________________
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define FIM 5
 
typedef struct Tlocalidade localidade;
 
struct TLocalidade {
  char nome[20];
  int codigo;
  float temp;
  int umidade;
  localidade *proximo;
} *tail;
 
void listar_temperatura_por_cidade()
{

char nome[20];
    localidade *pa,*pp;
    pa=tail;
    pp=tail->proximo;
    scanf("%s",nome);
    
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
    pa=pp;
    pp=pp->proximo;
    }
    
    if (pp!=NULL){
    printf("Nome: %s\n codigo: %d\n temperatura: %f\n umidade: %d\n", pp->nome, pp->codigo, pp->temp, pp->umidade);
	}
}
 
void remover_cidade()
{
  char nome[20];
    localidade *pa,*pp;
    pa=tail;
    pp=tail->proximo;
    scanf("%s",nome);
    
    while(pp!=NULL && strcmp(pp->nome,nome)!=0){
    pa=pp;
    pp=pp->proximo;
    }
    
    if (pp!=NULL){
    pa->proximo=pp->proximo;
    free(pp);
    }
}
 
void inserir_cidade()
{
	
    localidade *inserir=(localidade*) malloc(sizeof(localidade));
    printf("Digite o nome: ");
    scanf("%s",inserir->nome);
    printf("Digite o codigo: ");
    scanf("%s",inserir->codigo);
    printf("Digite a temperatura: ");
    scanf("%s",inserir->temp);
    printf("Digite a umidade: ");
    scanf("%s",inserir->umidade);

    if (tail==NULL){
        tail=inserir;
    }
        else{
            inserir->proximo=tail->proximo;
            tail->proximo=inserir;
            }
}
 
void listar_todos()
{

	
 localidade *p;
   for (p = tail; p != NULL; p = p->proximo)

      printf("Nome: %s | codigo: %d | temperatura: %f | umidade: %d\n", p->nome,p->codigo,p->temp,p->umidade);
      
}      
    
void main()
{
  int opcao;
 
  tail=NULL;
 
  do {
    printf("1-Listar por nome\n 2-Remover cidade\n 3-Inserir cidade\n 4-Listar todos\n 5-FIM\n");
    scanf("%d", &opcao);
    switch(opcao) {
    case 1: listar_temperatura_por_cidade();
            break;
    case 2:
            remover_cidade();
            break;
    case 3:
            inserir_cidade();
            break;
    case 4:
            listar_todos();
            break;
    default:
            break;
    }
  } while(opcao!=FIM);
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define FIM 5
#define BUFFER 64

typedef struct TLocalidade {
  char nome[20];
  int codigo;
  float temp;
  int umidade;
  struct TLocalidade *proximo;
} Dados;

//Funções para manusear os dados (irão retornar dados)
Dados *inicia_dados  (char *nome, int idade);
Dados *insere_dados  (Dados *dados, char *nome, int idade);
Dados *delbusca_dados(Dados *dados, char *chave);
Dados *deleta_dados  (Dados *dados, int nTipo);
int   checa_vazio    (Dados *dados);
 
//Funções para mostrar dados
void  exibe_dados    (Dados *dados);
void  exibe_tamanho  (Dados *nova);
void  busca_dados    (Dados *dados, char *chave);

//Inicializando os dados da lista
Dados *principal = NULL;
 
void remover_cidade()
{
    char *chave;
    //Se não estiver vazio
    if (!checa_vazio(principal)) {
        chave = (char *)malloc(BUFFER);
        //Armazenando o valor digitado
        fprintf(stdout, "Digite o nome para buscar: \n--> ");
        scanf("%s", chave);
        //Deletando a chave buscada
        principal = delbusca_dados(principal, chave);
    }
}

Dados *delbusca_dados(Dados *dados, char *chave) {
    int achou=0,cont=0;
    Dados *juntou, *aux, *nova=dados;        
 
    //Correndo a lista e verificando se encontrou a string buscada, se sim, aumenta o contador e seta a variável de busca
    for (; nova != NULL; nova = nova->proximo) {
        if (strcmp(chave, nova->nome) == 0) {
            achou=1;
            cont++;
        }
    }
 
    //Se encontrou a busca
    if(achou==1){
        int ind=0;
        //Correndo a lista
        for(ind=0;ind<cont;ind++){
            //Se encontrou na primeira casa apaga a primeira casa
            if(strcmp(chave,dados->nome)==0){
                aux=dados;
                dados=dados->proximo;
                free(aux);
            }
            //Senão, procura até encontrar
            else{
                aux=dados;
                //Posiciona na frente do encontro para exclusão
                while(strcmp(chave,aux->nome)!=0){
                    aux=aux->proximo;
                }
 
                juntou=dados;
                //Enquanto o auxiliar juntou for diferente do posicionado para exclusão
                while(juntou->proximo!=aux){
                    juntou=juntou->proximo;
                }
                //Aponta para o próximo valor válido
                juntou->proximo=aux->proximo;
 
                free(aux);
            }
        }
        fprintf(stdout, "Excluido.\n");
    }
    else
        fprintf(stdout, "Nenhum resultado encontrado.\n");
 
    getchar();
    return dados;
}
 
//Função que testa se a lista esta vazia
int checa_vazio(Dados *dados) {
    //Se a lista estiver vazia
    if (dados == NULL) {
            fprintf(stdout, "Lista vazia!\n");
            getchar();
            return 1;
    } else
            return 0;
}
 
void lista_vazia(void)
{
    char *nome;
    int codigo, umidade;
    float temp;
    //Alocando dados para uma String
    struct TLocalidade *inserir=(char*) malloc(BUFFER);
    //Lendo String Nome
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
    scanf("%s", nome);
    fprintf(stdout, "\n");
    //Lendo int codigo
    fprintf(stdout, "Digite o Codigo: \n----> ");
    scanf("%d", &codigo);
    fprintf(stdout, "\n");
    //Lendo float temp
    fprintf(stdout, "Digite a Temperatura: \n----> ");
    scanf("%d", &temp);
    fprintf(stdout, "\n");
    //Lendo int umidade
    fprintf(stdout, "Digite a umidade: \n----> ");
    scanf("%d", &umidade);
    fprintf(stdout, "\n");
    //Lançando os dados lidos na lista Principal
    free(principal);
    principal = inicia_dados(nome, codigo, temp, umidade);
}

Dados *inicia_dados(char *nome, int codigo, float temp, int umidade) 
{
    Dados *novo;
    //Alocando memória para a posição atual da lista
    novo = (Dados *)malloc(sizeof(Dados));
    //Lançando os dados lidos
    novo->nome = (char *)malloc(strlen(nome)+1);
    strncpy(novo->nome, nome, strlen(nome)+1);
    novo->codigo = codigo;
    novo->temp = temp;
    novo->umidade = umidade;
    //Apontando para a próxima posição da lista
    novo->proximo = NULL;
    return novo;
}

void inserir_cidade()
{
    char *nome;
    int codigo, umidade;
    float temp;
    //Alocação de espaço para String Nome
    nome = (char *)malloc(BUFFER);
    //Armazenando String Nome
    fprintf(stdout, "\n\nDigite o Nome: \n----> ");
    scanf("%s", nome);
    fprintf(stdout, "\n");
    //Armazenando Int codigo
    fprintf(stdout, "Digite o codigo: \n----> ");
    scanf("%d", &codigo);
    fprintf(stdout, "\n");
    //Lendo float temp
    fprintf(stdout, "Digite a Temperatura: \n----> ");
    scanf("%d", &temp);
    fprintf(stdout, "\n");
    //Lendo int umidade
    fprintf(stdout, "Digite a umidade: \n----> ");
    scanf("%d", &umidade);
    fprintf(stdout, "\n");
    //Criando listas auxiliares        
    Dados *final,*aux;
    //Alocando dados para a posição final da lista
    final = (Dados *)malloc(sizeof(Dados));
    //Setando os valores
    final->nome = (char *)malloc(strlen(nome)+1);
    strncpy(final->nome, nome, strlen(nome)+1);
    final->codigo = codigo;
    final->temp = temp;
    final->umidade = umidade;
    //A pŕoxima posição será Nulo
    final->proximo=NULL;
    //A lista auxiliar será igual a Principal
    aux=principal;
    //Enquanto o próximo de auxiliar não for Nulo
    while(aux->proximo!=NULL){
        aux=aux->proximo;
    }
    //O último valor, será Nulo, e depois apontando para
    //o Final
    aux->proximo=NULL;
    aux->proximo=final;
}

 
void listar_todos()
{
    fprintf(stdout, "Cadastro:\n\n");
    fprintf(stdout, "------------------------\n");
    //Exibindo todos os valores da lista
    for (; Dados != NULL; Dados = Dados->proximo) {
        fprintf(stdout, "Nome: %s\n Codigo: %d\n Temperatura: %d\n Umidade: %d\n",Dados->nome, Dados->codigo, Dados->temp, Dados->umidade);
        fprintf(stdout, "------------------------\n");
    }
    getchar();
}      
    
void main()
{
  lista_vazia();    
  int opcao;
 
  do {
    printf("1Remover cidade\n 2-Inserir cidade\n 3-Listar todos\n 4-FIM\n");
    scanf("%d", &opcao);
    switch(opcao) {
    case 1:
            remover_cidade();
            break;
    case 2:
            inserir_cidade();
            break;
    case 3:
            listar_todos();
            break;
    default:
            break;
    }
  } while(opcao!=FIM);
}



<< Equipe3-2015-1