Brown. Postado Junho 12, 2008 Denunciar Share Postado Junho 12, 2008 Oi pessoal, estou fazendo um programa, mais não ta dando certo, alguém ajuda aí?----------------------------------------------------------------------------------------------------------------------------------Considere um arquivo chamado “paciente.txt” que armazena os dados dos 10 pacientes de um endocrinologista. O arquivo é organizado onde cada paciente tem seguintes dados:<nome do paciente><idade> <peso> <altura>Faça um programa que leia os dados e guarde em um arquivo chamado “acimadopeso.txt” os nomes e as idades dos pacientes que estão acima do peso ideal fornecido pela relaçãoPesoIdeal = (altura − 1) × 100.#include<stdio.h> #include<stdlib.h> int main (void) { char n[30]; float a,p,imc; int id,i=0; FILE *x; FILE *y; x=fopen("paciente,txt","rt"); if(x==NULL) { printf("não e possivel abrir o arquivo"); system("pause"); return 1; } y=fopen("acima do peso.txt","wt"); if(y==NULL) { printf("não e possivel abrir o arquivo"); system("pause"); return 1; } while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) imc=p/(a*a); for(i=0;i<10;i++) { if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } } fclose(x); fclose(y); system("pause"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 12, 2008 Denunciar Share Postado Junho 12, 2008 O grande problema é com o while. Ele não possui limitadores e portanto apenas o código logo após é que é executado dentro dele porém deveria ser executado todo o código abaixo. O for também não deveria existir.O correto seria:while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) { imc=p/(a*a); if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } } Outro problema é com a abertura do arquivo "acima do peso.txt". Caso a sua abertura falhe o programa termina porém o outro arquivo está aberto! Assim o código deveria ser: y=fopen("acima do peso.txt","wt"); if(y==NULL) { fclose(x); printf("não e possivel abrir o arquivo"); system("pause"); return 1; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Kolke Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 (editado) sem o for vai ficar sem a contagemdos dez pacientes Editado Junho 13, 2008 por Kolke Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Brown. -- Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 obrigado, mais ainda não rodou. vou tentar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 Mas você não precisa contar o número de pacientes pois os dados estão vindo do arquivo, não é?Porque não funciona, o que acontece? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Brown. -- Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 depois da contagem dos pacientes, não gera o arquivo com os nomes e as idades dospacientes que estão acima do peso#include<stdio.h> #include<stdlib.h> int main (void) { char n[30]; float a,p,imc; int id,i=0; FILE *x; FILE *y; x=fopen("paciente,txt","rt"); if(x==NULL) { printf("não e possivel abrir o arquivo"); system("pause"); return 1; } y=fopen("acima do peso.txt","wt"); if(y==NULL) { printf("não e possivel abrir o arquivo"); fclose(x); system("pause"); return 1; } while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) { imc=p/(a*a); if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } } fclose(x); fclose(y); system("pause"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 Vamos analisar o que pode estar errado: se o arquivo não é gerado ou a gravação no arquivo está errada e nada é gravado (o que não parece) ou não entra dentro do if para gravar no arquivo (o que parece estar acontecendo).Para não entrar no if, ou o imc que está sendo calculado sempre está fora dos valores em que a pessoa é considerada obesa ou o fscanf sempre retorna EOF pois o arquivo de entrada está vazio ou com algum formato inválido, nem fazendo a checagem.Faça o seguinte: use este código no lugar do while atual:while(fscanf(x,"%s %d %.2f %.2f",n,&id,&p,&a)!=EOF) { imc=p/(a*a); printf("Paciente: '%s', %d anos, %.02f kg e %.02f m. Seu IMC é %.02f\n", n, id, p, a, imc); if((imc>=25)&&(imc<30)) { fprintf(y,"%s %d acima peso", n,id); } }Através deste printf você conseguirá ver se os dados estão sendo lidos corretamente do arquivo e calcular manualmente o IMC para saber se o cálculo está correto. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Brown. Postado Junho 13, 2008 Autor Denunciar Share Postado Junho 13, 2008 (editado) Fui traido por uma virgula, estava ("paciente,txt", "rt");mais agora da a mensagem "não e possivel abrir o arquivo"agora não to entendendo se o arquivo "paciente.txt" não existi, tenho que digitar na "tela preta" os dados pra ele captar as informações criando assim o arquivo "paciente.txt" e salvar as informações, pra depois entrar no outro arquivo acima do peso.txt pra ver o resultado? Editado Junho 13, 2008 por Brown. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Junho 13, 2008 Denunciar Share Postado Junho 13, 2008 É isso mesmo. O programa não lê dados do usuário, apenas do arquivo!Assim você precisa de gerar o arquivo primeiro. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Brown. Postado Junho 13, 2008 Autor Denunciar Share Postado Junho 13, 2008 Valeu, obrigado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Brown.
Oi pessoal, estou fazendo um programa, mais não ta dando certo, alguém ajuda aí?
----------------------------------------------------------------------------------------------------------------------------------
Considere um arquivo chamado “paciente.txt” que armazena os dados dos 10 pacientes de um endocrinologista.
O arquivo é organizado onde cada paciente tem seguintes dados:
<nome do paciente><idade> <peso> <altura>
Faça um programa que leia os dados e guarde em um arquivo chamado “acimadopeso.txt” os nomes e
as idades dos pacientes que estão acima do peso ideal fornecido pela relação
PesoIdeal = (altura − 1) × 100.
Link para o comentário
Compartilhar em outros sites
9 respostass 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.