Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2016
    Messaggi
    10

    [C]Problema con Fseek in un ciclo while

    Salve, ho creato una funzione che legge da file una tabella 240*4 e memorizzare i dati in due diverse strutture a seconda se l'elemento nell'ultima colonna è uguale a 1 o 0
    I dati sono strutturati nel seguente modo
    mat o m i/o Mat=matricola o=ora m=minuti i/o=ingresso o uscita
    10097 17 42 0
    10097 07 32 1
    12406 07 35 1
    20941 07 54 1
    10097 12 45 0
    20941 12 57 0
    10097 13 04 1
    12406 13 10 0

    la seguente matrice è stata copiata e incollata 30 volte su un file chiamato turni.txt per simulare le entrate e uscite da una fabbrica di un mese lavorativo per 3 operai.
    Al fine di calcolare le ore lavorative mensili di ogni operaio devo memorizzare le stringhe terminanti con 0 in una struttura operai entrata, e quelle terminanti con 1 in operai uscita
    così dichiarata

    codice:
    typedef struct{
        int mat; //matricola operaio
        int ore; //ora timbro
        int minuti; //minuti timbro
        int flag; //flag 1 per ingresso fabbrica flag 0 per uscita fabbrica
    }operai;
    Per cercare di leggere da file le due strutture ho creato questa funzione

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include "operai.h"
    
    
    
    
    void leggi_file(operai *entrata, operai *uscita)
    {
        FILE *leggi;
        int i=0;
        int j=0;
        int flag;
    
    
        if((leggi=fopen("turni.txt", "r"))==NULL)
        printf("impossbile aprire il file turni.txt\n");
    
            /*fscanf(leggi, "%d", &entrata[i].mat);
        fscanf(leggi, "%d", &entrata[i].ore);
        fscanf(leggi, "%d", &entrata[i].minuti);
        printf("dimensione bit  %d", ftell(leggi));*/  //ftell ritorna 11 
    
    
    
    
        while(!feof(leggi)){
            fseek(leggi, 11, SEEK_CUR);   //posizione il puntatore file prima del 4 elemento della riga
            fscanf(leggi, "%d", &flag );     //memorizza 4 elemento in flag 
            
            if(flag==1){                                       /*se flag==1 
            fseek(leggi, -11, SEEK_CUR);                  ritorna dalla posizione corrente 11 bit indietro e leggi   
            fscanf(leggi, "%d", &entrata[i].mat);        da inizio riga. */
            fscanf(leggi, "%d", &entrata[i].ore);
            fscanf(leggi, "%d", &entrata[i].minuti);
            fscanf(leggi, "%d", &entrata[i].flag);
            i++;
            }else if(flag==0){
            fseek(leggi, -11, SEEK_CUR);
            fscanf(leggi, "%d", &uscita[j].mat);
            fscanf(leggi, "%d", &uscita[j].ore);
            fscanf(leggi, "%d", &uscita[j].minuti);
            fscanf(leggi, "%d", &uscita[j].flag);
            j++;
            }
        }
        fclose(leggi);
    
    
    }

    Il problema è che se provo a stampare a schermo le strutture ho risultati davvero bizzari, e non riesco a capire il motivo per il quale non riesco a memorizzare correttamente i dati del file all'interno della struttura
    Ultima modifica di Nasio91; 06-02-2017 a 19:11

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.