Ir para conteúdo
Fórum Script Brasil
  • 0

PROBLEMA COM PONTEIROS DINÂMICO - AJUDA


Arduin

Pergunta

 

Prezados,

 

Estou tentando salvar os dias bons em um vetor chamado dias_bons e dias ruins em um vetor chamado de dias_ruins.

Entretando, não consegui imprimir os valores na função "do".

 O problema é que só está salvando o último vetor rrodado.

 

Alguém pode ajudar?

Grato!

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

#define TRUE 1
#define FALSE 0


typedef struct
{
float temp, press;
int chuva, mm_prec, dia_bom, dia_ruim, neblina;
char nome[200];
}eventos_atm;

void ler_eve(eventos_atm *est) {
printf("Digite o nome do Coletor:\n");
scanf("%s", &est->nome);
printf("Qual a temperatura:\n");
scanf("%f",&est->temp);
printf("Qual a pressao atmosferica:\n");
scanf("%f",&est-> press);
printf("Houve chuva?\n1 para sim e 0 para não.\n");
scanf("%d",&est->chuva);
printf("Houve neblina?\n1 para sim e 0 para não\n");
scanf("%d", &est->neblina);


if (est->chuva == TRUE) {
printf("Quantos mm de precipitacao:\n");
scanf("%d",&est->mm_prec);
}

else if( est->chuva >= '3') {
printf("Valor invalido...\nEditar conteudo com o valor correto.\n\n");
}

}

void edit_eve ( eventos_atm *est ) {
    int i;
    printf ( "Qual dia a ser editado:\nEntre 1 e 2.\n" );
    scanf ( "%d", &i );
    printf ( "Dia %d\n", i );

    if ( i > 0 && i < 8 ) {
        ler_eve ( &est[i-1] );
    } else{
        printf ( "O valor está fora do intervalo permitido." );
    }
}


void exi_eve (eventos_atm *est) {
        printf("nome: %s\n", est->nome);
        printf("temperatura: %.2f\n", est->temp);
        printf("pressao: %.2f\n", est->press);
        printf("mm_prec: %d\n", est->mm_prec);
        printf("\n");

}



int main() {

eventos_atm *vetor, *dias_bons, *dias_ruins;
int i, valor, dias, dr, db;

printf("Quantos dias deseja gravar na memoria?\n");
scanf("%i", &dias);

vetor=(eventos_atm*)malloc(sizeof(eventos_atm)*dias);

dr = 0;
db = 0;

for (i=0; i<dias; i++) {
    printf("Dia %i\n\n", i+1);
    ler_eve(&vetor[i]);
    if (vetor[i].chuva==TRUE || vetor[i].neblina == TRUE) {
    dr = dr+1;
}
    else {
    db = db+1;
    }
}

dias_bons=(eventos_atm*)malloc(sizeof(eventos_atm)*db);
dias_ruins=(eventos_atm*)malloc(sizeof(eventos_atm)*dr);

for (i=0; i<dias; i++) {

if (vetor[i].chuva==TRUE || vetor[i].neblina == TRUE) {
    dias_ruins = &vetor[i];
 }

    else{
    dias_bons = &vetor[i];
    }

    }

free(vetor);
free(dias_bons);
free(dias_ruins);


do
      {
      printf("Escolha uma das opcoes: \n");
      printf("1 - Editar dia\n");
      printf("2 - Exibir dia\n");
      printf("3 - Exibir mm precipit\n");
      printf("4 - Exibir dias bons\n");
      printf("5 - Exibir dias ruins\n");
      printf("6 - Exibir vetores bom\n");
      printf("7 - Exibir vetor ruins\n");
      printf("8 - Sair\n");
      scanf("%d", &valor);
      printf("\n");

      switch (valor)
  {
     case 1 :
        edit_eve(&vetor[0]);
     break;

     case 2 :
        printf("Qual dia para exibir? [1-7]\n");
        scanf("%d", &i);
        printf("Dia %d\n", i);
        exi_eve(&vetor[i-1]);
     break;

     case 3 :
        printf("Qual dia para ver quantidade de mm de precipitacao? [1-7]\n");
        scanf("%d", &i);
        printf("Dia %d\n", i);
        printf("A precipitacao no dia %d foi de\n", i);
        printf("\n");
     break;

     case 4 :
     printf("O numero de dias bons são: %d\n\n", db);
     break;
     case 5 :
     printf("O numero de dias ruins são: %d\n\n", dr);
     break;

     case 6:
        for (i=0; i<db; i++ )

        printf("nome: %s\n", dias_bons[i].nome);
        printf("temperatura: %.2f\n", dias_bons[i].temp);
        printf("pressao: %.2f\n", dias_bons[i].press);
        printf("mm_prec: %d\n", dias_bons[i].mm_prec);
        printf("\n");
        break;

    case 7:
        for (i=0; i<dr; i++ )

        printf("nome: %s\n", dias_ruins[i].nome);
        printf("temperatura: %.2f\n", dias_ruins[i].temp);
        printf("pressao: %.2f\n", dias_ruins[i].press);
        printf("mm_prec: %d\n", dias_ruins[i].mm_prec);
        printf("\n");
        break;


     case 8 :
        printf ("******************* Obrigado!!!*******************\n\n");
     break;



    default :
       printf ("Valor invalido!\n");
  }}while(valor != 8);

}

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0
for (i=0; i<dias; i++) {

if (vetor[i].chuva==TRUE || vetor[i].neblina == TRUE) {
    dias_ruins = &vetor[i]; //???
 }

    else{
    dias_bons = &vetor[i]; //???
    }

    }

/* ---- ????????? -----
free(vetor);
free(dias_bons);
free(dias_ruins); */

O primeiro erro que tens aí, é estáres a gravar (dentro do segundo for loop) cada endereço de cada dado do vetor principal, dentro do ponteiro e não cada dado do vetor principal dentro do bloco de dados do vetor "dias_ruins" e "dias_bons". Devia ser assim: 

if......
dias_ruins[contador_de_dias_Ruins] = vetor[i];
contador_de_dias_Ruins++;

else.....
dias_bons[contador_de_dias_Bons] = vetor[i];
contador_de_dias_Bons++;

Segundo... Porque é que limpas os dados todos?

Editado por CyberGate
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...