1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Como ler ficheiros valores inteiros de um ficheiro em c?

Discussão em 'Programação' iniciada por PedroPereiraStr, 2 de Dezembro de 2007. (Respostas: 3; Visualizações: 2272)

  1. Usa a função fscanf.
     
  2. raVemjr

    raVemjr I'm cool cuz I Fold

    Se te referes a ler numeros inteiros de um ficheiro, creio que vais ter que fazer à pata. Ler o ficheiro linha a linha, e analisar a string resultante e quando achares caracteres de algarismos tens de usar o atoi para devolver um int de uma string com o numero correspondente...
     
  3. Terrible_One

    Terrible_One Power Member

    :)Boas,

    Podes usar a fseek() para percorrer o ficheiro à caça dos inteiros, crias um vector para armazenas os inteiros à medida que os vais caçando, com recurso ao atoi, visto que provavelmente os vai estar a ler a partir de um ficheiro de texto, logo tens fazer um casting para inteiro. ve o seguinte exemplo.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    int main(void) {
    long int offset = 5L;
    int inputchar;
    /*Abres em modo de leitura*/
    FILE *inputfile = fopen( "nomeFicheiro.txt", "r" );
     
    /* Testas de teve sucesso ao abrir o ficheiro*/
    if (inputfile == NULL) {
    perror( "falhou ao abrir" );
    exit(EXIT_FAILURE);
    }
     
    /*ve com o SEEK_SET se tas no inicio do ficheiro, senao deu barraca*/
    if ( fseek( inputfile, offset, SEEK_SET ) != 0 ) {
    perror( "fseek falhou" );
    exit(EXIT_FAILURE);
    }
     
    /*Dou-te um exemplo para verificares se chegaste ao fim do ficheiro*/ 
    inputchar = fgetc( inputfile );
    // se chegaste ao fim do ficheiro (EOF = end of file)
    if ( inputchar == EOF ) {
    fprintf( stderr, "Fim do ficheiro encontrado no offset %ld\n", offset );
    exit(EXIT_FAILURE);
    }
     
    /*Valor hexadecimal 0x%X*/
    printf( "O caracter na posição %ld tem o valor 0x%X\n",
    offset, (unsigned int) inputchar );
     
    return 0;
    }
    O que podes facilmente fazer é criar uma função e em vez de veres se chegou ao fim do ficheiro, faer uma comparação, e se for inteiro retornas o valordentro do vector dos inteiros que falei, e fora colocas um ciclo que vai ver posição a posição cada caracter antes de chegar ao EOF, em cada volta incrementas uma posição dentro do ficheiro.

    Já te dei uma ideia, agora vai ver a função fseek() e tenta implementar o que eu disse.

    PS- obrigado ao HecKel pela code tag - mybad
     
    Última edição: 5 de Dezembro de 2007

Partilhar esta Página