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

Arquivos


Brown.

Pergunta

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.

#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;
}

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

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;
  }

Link para o comentário
Compartilhar em outros sites

  • 0
Guest --Brown. --

depois da contagem dos pacientes,

não gera o arquivo com os nomes e as idades dos

pacientes 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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Brown.
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...