Arduin Postado Agosto 23, 2016 Denunciar Share Postado Agosto 23, 2016 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); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 CyberGate Postado Agosto 25, 2016 Denunciar Share Postado Agosto 25, 2016 (editado) 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 Agosto 25, 2016 por CyberGate Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Arduin
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!
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
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.