|
![]() |
||
Linguagem c (função de leitura criada por mim dando "pa
|
||
. Nós temos 754.108 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.
![]() |
|
|
Opções do Tópico |
|
|
#1 (permalink) |
|
Membro Senior
|
Estou usando uma função de leitura criada por mim (é obrigatória neste trabalho da faculdade). Esta função retorna um fscanf onde são lidos duas strings e um inteiro. Acho que não é o ideal mas estou incrementando estas stings e este inteiro na própria função (as strings e o inteiro são parâmetros da função e estou usando um estrutura). Eis aí a função que está usando a função de leitura usada por mim. Ela retorna a maior media de determinada região (são 4 regiões alfa, beta, delta, gama e cada regiao tem um indice pluviometrico que é um inteiro) . O PROBLEMA É QUE A FUNÇÃO DE LEITURA NÃO CAPTURA OS INTEIROS PRESENTES NO ARQUIVO E RETORNA UM ENDEREÇO DE MEMÓRIA. ESTÁ EM DESTAQUE A FUNÇÃO DE LEITURA NO PROGRAMA ABAIXO.
void regiaomaischuvosa (void) { int k=0; //Será usada para representar índices de vetores; float mediaalfa; //Variável correspondente à media pluviométrica da região alfa; float mediabeta; //Variável correspondente à media da região beta; float mediagama; //Variével correspondente à media da região gama; float mediadelta; //Variável correspondente à media da região teta; int somaalfa=0; //Variável correspondente à soma dos indices pluviométricos da região alfa; int somabeta=0; //Variável correspondente à soma dos indices pluviométricos da região beta; int somadelta=0; //Variável correspondente à soma dos indices pluviométricos da região teta; int somagama=0; //Variável correspondente à soma dos indices pluviométricos da região gama; int contaalfa=0; //Variável que contará a quantidade de aparições da região alfa; int contabeta=0; //Variável que contará a quantidade de aparições da região beta; int contadelta=0; //Variável que contará a quantidade de aparições da região teta; int contagama=0;//Variável que contará a quantidade de aparições da região gama; FILE *arquiv; //Variável relacionada à abertura do arquivo; char nomearqu[30]; //Nome do arquivo a ser digitado pelo usuário. typedef struct Est { char nom[6]; //Estrutura que corresponde à três dados a serem listados:nome(no[5]), data(da[9] e índice pluviométrico.); char dat[9]; int plu; }Est; Est cadei[100]; //Vetor da estrutura criada; printf("\033[42mDigite o nome do arquivo:\033[0m "); scanf("%s",nomearqu); system("clear"); if((arquiv=fopen(nomearqu,"r"))==NULL) { fprintf(stderr,"Erro!!! Arquivo inexistente!!\n"); main(); } else //Abertura do arquivo somente para leitura; { ************************************************** ************************** while((fscanf(arquiv,"%s %s %d", cadei[k].nom, cadei[k].dat, &cadei[k].plu)) != EOF) ************************************************** ******************************** { if(!(strcmp(cadei[k].nom,"alfa"))) //Em cada situação em que o nome da região digitada pelo usuário seja igual ao nome da região no arquivo será incrementado seu contador(retrata o número de aparições de tal região) e será feita a soma dos indices pluviométricos da mesma região; { contaalfa++; somaalfa= somaalfa + cadei[k].plu; } else if(!(strcmp(cadei[k].nom,"beta"))) { contabeta++; somabeta= somabeta + cadei[k].plu; } else if(!(strcmp(cadei[k].nom,"gama"))) { contagama++; somagama= somagama + cadei[k].plu; } else if(!(strcmp(cadei[k].nom,"delta"))) { contadelta++; somadelta= somadelta + cadei[k].plu; } k++; } //Esta sequência de "if's" é necessária pois podem não aparecer algumas regiões no arquivo e, se isso ocorre, não há como comparar se uma média é maior que todas as outras. Por isso, caso a região não apareça, e necessário atribuir o valor 0 à sua média. Neste caso, este processo é feito atribuindo à somadosindices de uma região o valor 0 e ao seu contador um valor diferente de 0, para que a operação soma/contador seja igual a 0 e todas as médias possam ser comparadas; if(contaalfa==0) { somaalfa=0; contaalfa=1; } if(contabeta==0) { somabeta=0; contabeta=2; } if(contadelta==0) { somadelta=0; contadelta=3; } if(contagama==0) { somagama=0; contagama=4; } //A media de cada região é obtida dividindo o somatório dos indices pluviométricos pela quantidade de vezes em que cada região aparece; mediaalfa=((float)somaalfa/(float)contaalfa); mediabeta=((float)somabeta/(float)contabeta); mediadelta=((float)somadelta/(float)contadelta); mediagama=((float)somagama/(float)contagama); //As médias das regiões serão comparadas, será impresso o nome da região com o valor inteiro de sua média(maior média de todas as regiões comparadas); if( (mediaalfa>=mediabeta) && (mediaalfa>=mediadelta) && (mediaalfa>=mediagama) ) printf ("\nA região mais chuvosa é alfa, com a media de indice pluviometrico de: %.1f mm\n\n",mediaalfa); else if( (mediabeta>=mediaalfa) && (mediabeta>=mediagama) && (mediabeta>=mediadelta) ) printf ("\nA região mais chuvosa é beta, com a media de indice pluviometrico de: %.1f mm\n\n",mediabeta); else if( (mediadelta>=mediabeta) && (mediadelta>=mediaalfa) && (mediadelta>=mediagama) ) printf ("\nA região mais chuvosa é delta, com a media de indice pluviometrico de:%.1f mm\n\n",mediadelta); else if( (mediagama>=mediabeta) && (mediagama>=mediaalfa) && (mediagama>=mediadelta) ) printf ("\nA região mais chuvosa é gama, com a media de indice pluviometrico de: %.1f mm\n\n",mediagama); fclose(arquiv); //Comando para fechar arquivo. main(); } } int leitura (char reg[5],char dat[9], char plu[4], FILE *arqu) { return fscanf(arqu,"%s %s %s", reg, dat, plu); } |
|
|
|
|
|
#2 (permalink) |
|
Novo Membro
|
Ao invez de usar muitos "Ifs" tente uma tomada, um switch ! , as vese muitos ifs podem dar um erro chamado missmatch. que ai o programa nao consegue aplicar as condicoes, isso nao acontece com o switch
Nao custa tentar !
__________________
Guilherme Matias Guerreiro |
|
|
|
|
|
#3 (permalink) |
|
Membro Senior
|
MAS O PROBLEMA ESTÁ NA FUNÇÃO DE LEITURA QUE ESTÁ DENTRO DO WHILE. Ela não retorna os inteiros que estão dentro do arquivo, mas sim um endereço de memória. Gostaria de saber o que fazer pra corrigir isso.
|
|
|
|
|
|
#4 (permalink) | |
|
Highlander
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Primeiro, edite sua mensagem, e coloque o código entre tags [code] e [/code]. Sem isso, fica quase ilegível.
Citação:
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns ![]() |
|
|
|
|
|
|
#5 (permalink) | |
|
Veterano
Registrado em: Nov 2004
Mensagens: 1.055
Reputação: 16
![]() |
Citação:
Mas, como disse o jqueiroz, nesse caso não dá para utilizar switch, que só pode ser aplicado sobre um valor "integral".
__________________
Jeferson Charles Mayer "Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?" |
|
|
|
|
|
|
#6 (permalink) |
|
Novo Membro
|
ta totalmente ilegivel esse codigo...como jqueiroz mencionou coloque as tags [code ] [/code]
__________________
+--------------------------------+ + Um abraço + +--------------------------------+ |
|
|
|
![]() |
| Opções do Tópico | |
|
|