FILE function in C

0

What I need to do: Develop an algorithm where you calculate from the values of input of .txt file or values entered by the user, a percentage value that is out of the allowed, in case + -3 for all cases, where the program performs a media and compares value by value if it is inside or outside the expected, what is outside it should show the result as a percentage of what was out of the expected

So far, I've realized this:

#include<stdio.h>
#include<string.h>
int main(void)
{
//decalara entrada de file.txt
float file_ent[]={0};
//declara saida de file.txt 
float saida;

// declara entrada de temperatura 
float vetor[15000]={0};
//declara contador e entrada de menu
int ent, ent_aux, cont,/* cont_aux,*/ cont_ex /*, cont_out*/;
//declara saida onde apresenta resultado obtido
float ex, cont_out, cont_aux,media;
//variaveis para log-in
int num_key;

//cabecalho inicial insercao de senha
do
{
    puts("\n\n\t*********************************************");
    puts("\t*                                           *");
    puts("\t*     Calculador de temperatura             *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*          DIGITE SUA SENHA                 *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*  DIGITE 0 PARA SAIR                       *");
    puts("\t*********************************************");
    scanf("%i",&num_key);
    if(num_key == 0)
    {
        return 0;
    }
    if (num_key!= 123456)
    {
        printf(" TENTE NOVAMENTE ");
    }


}while(num_key!=123456);

//cabecalho de escolha de entrada de arquivo ou digitacao
do
{
    puts("\n\n\t*********************************************");
    puts("\t*                                           *");
    puts("\t*     Calculador de temperatura             *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*       Escolha entre importar o arquivo    *");
    puts("\t* ou digitar manualmente os valores, caso   *");
    puts("\t* digite 1 (SIM) para importar e 0 (NAO)    *");
    puts("\t* para nao importar o arquivo.              *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*     Lembrando que o arquivo deve estar    *");
    puts("\t* nomeado como \"entrada.txt\"                *");
    puts("\t*                                           *");
    puts("\t*                                           *");
    puts("\t*  DIGITE 0 PARA SAIR                       *");
    puts("\t*********************************************");
    scanf("%i",&num_key);

    // importar o arquivo para o programa
    if(num_key == 1)
    {
        printf(" VOCE OPTOU POR IMPORTAR O ARQUIVO ");

        FILE *file_ent;
        file_ent = fopen("entrada.txt", "r");
        for(cont=0;file_ent != NOF; cont++)
        {
            fscanf("%f",&file_ent);
        }
    }

    // nao importar e digitar manualmente
    if (num_key== 0)
    {

    }

    // caso nao 1 e caso nao 0
    if((num_key!=1) && (num_key!=0))
    {
        printf(" ***  OPCAO INVALIDA  ***");
    }


}while((num_key!=1) && (num_key!=0));



do
{
//cabecalho
puts("\n\n\t*********************************************");
puts("\t*                                           *");
puts("\t*     Calculador de temperatura             *");
puts("\t*                                           *");
puts("\t*        Calculador de temperatura          *");
puts("\t* mostrando somente a porcentagem de desvio *");
puts("\t*                                           *");
puts("\t* SELECIONE UMA OPCAO DESEJADA:             *");
puts("\t*                                           *");
puts("\t* 1           3 graus celcius               *");
puts("\t* 2          -3 graus celcius               *");
puts("\t* 3          -5 graus celcius               *");
puts("\t* 4          -8 graus celcius               *");
puts("\t* 5         -12 graus celcius               *");
puts("\t* 6         -15 graus celcius               *");
puts("\t* 7         -18 graus celcius               *");
puts("\t*                                           *");
puts("\t*                                           *");
puts("\t* Digite 66 para sair                       *");
puts("\t*                                           *");
puts("\t*                                           *");
puts("\t*  Caso erre algum valor no meio digite 999 *");
puts("\t*  onde abrira alguma opcoes para alterar o *");
puts("\t*   que voce errou. Apenas siga os passos   *");
puts("\t*                                           *");
puts("\t* Selecione uma opcao:                      *");
puts("\t*********************************************");

//le valor digitado e atribui a ent
scanf("%i",&ent);
//se ent == 0 programa finaliza
if(ent==66)
{
    return 0;
}

// se entrada for numeros de 1 a 7 entra no codigo
if((ent==1)||(ent==2)||(ent==3)||(ent==4)||(ent==5)||(ent==6)||(ent==7))
{           
//mostar opcao selecionada  
printf("\nVOCE SELECIONOU A OPCAO: %i\n\n",ent);

/*
laço for onde cont menor ou igual a 15000
ele repete ate o contador atingir valor desejado
*/

for (cont; cont<=15000;cont++)
{
    printf("Digite os valores de temperaturas desejadas: ");
    printf(" INDICIE: %i :   ",cont);
    cont_aux=cont;
    cont_ex=cont;       
    ex=ex+cont;                     

    /*
    le os valores do usuario e atribui ao vetor na variavel 
    escolhida pelo contador (cont)

    juntamente compara se for zero cai fora da operacao dando fim ao algoritmo

    caso o usuario tenha digitado algum valor errado
    ele podera alterar este valor e corrigir 
    conforme sua necessidade
    */

    scanf("%f",&vetor[cont]);
    if(vetor[cont]==66)
    {
        cont--;
        break;
    }   
    if(vetor[cont]==999)
    {
    // cabeçalho correcao de valor por indicie
    puts("\n\n\t***********************************************");
    puts("\t*             -- ATENCAO --                   *");
    puts("\t*    Neste momento voce pode altar algum      *");
    puts("\t* valor que foi digitado errado, preste       *");
    puts("\t* muita atencao no indicie do valor desejado  *");
    puts("\t* e siga os passos para que possamos auxuliar *");
    puts("\t* na correcao do mesmo                        *");
    puts("\t*                                             *");
    puts("\t*                                             *");
    puts("\t*                                             *");
    puts("\t*                                             *");
    puts("\t*     Digite o valor do indicie desejado:     *");
    puts("\t*                                             *");
    puts("\t* Digite 66 para sair                         *");
    puts("\t***********************************************");              
    // le entrada
    scanf("%i",&cont);
    printf("  Voce digitou o indicie: %i",cont);
    printf("  Digite o novo valor para este indicie: ");
    //le o indicie do valor errado
    scanf("%i",&vetor[cont]);
    printf("\n\t *** CONTINUANDO ***\n");
    //contador principal recebe ultimo contador armazenado por auxiliar
    cont=cont_aux;  
    /*
    decrementa em 1 o contador para repor o valor aonde foi digitado 
    o numero magico para alterar o valor errado e continuar de onde parou
    */
    cont--;                             
    }       
    if (vetor[cont]==66)
    {
        cont=15002;
    }           
}
//cabecalho de entrada de temperatura
puts("\n\n\t***********************************************");
puts("\t*                                             *");
puts("\t*     Apos digitar todos os valores desejados *");
puts("\t* vamos prosseguir com mais alguns passos     *");
puts("\t*     Primeiramente voce devera entrar com o  *");
puts("\t* valor da temperatura em questao que deseja  *");
puts("\t* calcular.                                   *");
puts("\t*                                             *");
puts("\t*     Digite a temperatura desejada           *");
puts("\t*                                             *");
puts("\t* Digite 66 para sair                         *");
puts("\t***********************************************");
scanf("%i",&ent_aux);
/*
para contador de 0 ate auxiliar aque recebe ultimo valor de contador
faça, contador + 1 no laço comparando se os valores do vetor forem maior
ou menor do que 3 acrescenta +1 no contador de saida com objetivo calcular
qual a porcentagem que ficou fora do calculado 
*/
for(cont=0;cont<=cont_aux;cont++)
{
    if((vetor[cont]>(ent_aux-3))&&(vetor[cont]<(ent_aux+3)))
    {
        cont_out++;
    }
    /*else
        {
            cont_out++;
        }*/
}

//calcula resultado
cont_out*100;
ex=cont_out/cont_aux;
ex=ex*100;

/*                      
//calcula media de temperatura
for(cont=0;cont<=cont_aux;cont++)
{
    media=vetor[cont]+media;
}
cont--;
media=media/cont;
media=media/2;
*/

//imprime em tela o resultado final
printf("\n\t\nVOCE OBETEVE: %.2f porcento dentro do esperado\n\n",ex);
//printf("\n\t\nMEDIA DE TEMPERATURA: %.2f",media);
}

// caso a entrada nao seja um valor de 1 a 7 imprime mensagem   
else
{
    printf ("\n\n\tValor invalido!\n\n");
}

//zera os valores dos contadores a cada fim de programa
cont=0;
cont_aux=0;
cont_out=0;

}while (ent!=66);
return 0;
}   

As far as I was aware, I did a good part of it, I only need the user to enter certain values in some moments, and in others he can import a .txt file with the name "input.txt" and at the end of the calculation return "saida.txt" with the final result and at some point it can enter values manually.

To a point I tried to declare a FILE but I'm not sure how it works, and finally it did not work! I ask you to help me and explain to me how to proceed.

    
asked by anonymous 17.04.2017 / 02:42

1 answer

0

Friend, your question was not very precise about your problem.

However, taking into account its last paragraph, the error contained where you want to import the file into the program is as follows:

  • It has two declarations of equal variables file_ent . One being a float vector and another being FILE * .
  • The function fscanf receives the FILE* and the rest of the parameters equal to the scanf as the argument.
  • If you want to check if FILE* has already reached the end of the file, check with EOF (meaning End-of-file), I also suggest using the feof() function - defined in the <stdio.h> header %.
  • Otherwise, other errors that appear will be due to previous errors. For example, you probably want to give scanf to the file and store it in the float vector, so you should indicate which índice do vetor you want to pass referência to fscanf function. p>

    In addition, your float file_ent vector is created with size 1, considering the initialization you did and not having numbers in the brackets. If you know what size vector is required for this task, put it in the brackets, otherwise you will have to manipulate it as ponteiro and use alocação dinâmica tools.

        
    17.04.2017 / 16:01