Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55

    [C] Scrivere Leggere in File

    Salve ragazzi..

    Come al solito ho bisogno del vostro aiuto...



    Ho un programma che deve creare un file in cui scrivere determinati dati che sono..3 stringhe e un intero..



    Il problema è che...La seconda stringa non me la scrive...Vi abbozzo la parte di codice utile

    puts("Inserire il Nome dell'impiegato: ");
    fflush(stdin);
    gets(Nome);
    puts("Inserire il Cognome dell'impiegato: ");
    fflush(stdin);
    gets(Cognome);
    puts("Inserire l'ID dell'impiegato (formato cccc/cccc): ");
    fflush(stdin);
    gets(Codice);
    puts("Inserire Il Numero di ore: ");
    fflush(stdin);
    scanf("%d", &ore);
    fprintf(fp, "%s %s %s %d",Nome, Cognome, Codice, ore);

    Non capisco perchè nel file alla fine risulteranno solo: Nome, Codice e le Ore di lavoro..Il cognome viene saltato...

    All'inizio avevo provato ad usare fwrite..ma avevo problemi con il dato di tipo intero..

    Ho provato ad usare un fprintf per ogni gets..E così funziona...Ma la stampa mi salta comunque il cognome (anche se però nel file è presente)


    La stampa l'avevo fatta così:
    fscanf(fp, "%s %s %s %d", Nom, Cogn, Cod, ore);
    printf("\n\n\n");
    printf("Nome: %s\nCognome: %s\nID: %s\nOre Lavoro: %d\n", Nom, Cogn, Cod, ore);

    Dove Nom, Cogn e Cod sono dichiarati allo stesso modo di Nome, Cognome e Codice (ovviamente)..


    Dov'è il mio solito errore da Novellino?


    Grazie in Anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Mostra tutto il codice compresa la dichiarazione delle variabili ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    #include <stdio.h>
    #include <stdlib.h>
    #define LUNGNOM 30
    #define LUNGID 8
    void main()
    {
    FILE *fp;
    char Nome[LUNGNOM],Cognome[LUNGNOM], Codice[LUNGID];
    char Nom[LUNGNOM], Cogn[LUNGNOM], Cod[LUNGID];
    short ore;
    int i=0;


    //Apertura del file con controllo
    if(( fp=fopen("impiegati.dat", "wb"))==NULL)
    {
    puts("Errore nell'apertura del file");
    exit(1);
    }
    //In caso di esito positivo


    //Inserimento dati impiegati
    puts("Inserire il Nome dell'impiegato: ");
    fflush(stdin);
    gets(Nome);
    puts("Inserire il Cognome dell'impiegato: ");
    fflush(stdin);
    gets(Cognome);
    puts("Inserire l'ID dell'impiegato (formato cccc/cccc): ");
    fflush(stdin);
    gets(Codice);
    puts("Inserire Il Numero di ore: ");
    fflush(stdin);
    scanf("%d", &ore);
    fprintf(fp, "%s %s %s %d",Nome, Cognome, Codice, ore);

    fclose(fp);

    //Apertura del file con controllo
    if(( fp=fopen("impiegati.dat", "rb"))==NULL)
    {
    puts("Errore nell'apertura del file");
    exit(1);
    }
    //In caso di esito positivo

    fscanf(fp, "%s %s %s %d", Nom, Cogn, Cod, ore);
    printf("\n\n\n");
    printf("Nome: %s\nCognome: %s\nID: %s\nOre Lavoro: %d\n", Nom, Cogn, Cod, ore);

    fclose(fp);




    system("PAUSE");

    }

    Questo era il codice...dico era perchè adesso ho preferito usare le struct (dovendo usare più informazioni sui singoli) ma il risultato è lo stesso...la seconda stringa..o non viene scritta nel file o non viene letta

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    8 caratteri per il codice

    codice:
    #define LUNGID 8
    se devi scriverlo in quel formato, sono pochi ... ne devi prevedere almeno 10 se scrivi cccc/cccc

    Il file non devi scriverlo/leggerlo in binario ... quindi non "wb" ma solo "w" e non "rb" ma solo "r"

    E alla fine la fscanf presenta un errore ... deve essere

    fscanf(fp, "%s %s %s %d", Nom, Cogn, Cod, &ore);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    per l'8 è stato un errore mio..il formato era cc/cccc

    ...ora provo con la correzione per l'fscanf


    mentre..si..il file deve essere binario

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    No ... il file NON deve essere binario se usi fscanf/fprintf

    Se devi usare il file binario, allora devi usare fread/fwrite
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Ah...gaffe tremenda..chiedo scusa


    Finchè lavoro sulle stringhe, non ho problemi con i parametri delle due funzioni fwrite e fread..

    Ma quando devo leggere/scrivere un dato di tipo short...Come lo uso?


    Cioè..esempio..

    fwrite (ore, sizeof(short), ??, fp)
    fread (ore, sizeof(short), ??, fp)

    il parametro per quanto riguarda il numero max di voci da trasferire..come lo gestisco?..negli esempi l'ho sempre visto usare con array e quindi il quarto parametro indicava la lunghezza massima dell'array...

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    fwrite (&ore, sizeof(short), 1, fp);
    fread (&ore, sizeof(short), 1, fp);

    Dai un'occhiata ai manuali / libri ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Inizio ringraziandoti per la pazienza e chiedendoti scusa per la mia cocciutaggine..
    Ho eseguito alcune correzioni anche grazie al tuo aiuto..
    Ho migliorato l'algoritmo con l'uso della funzione fseek...
    Finchè lavoro sulle stringhe, nessun problema...tutto perfetto...Appena comincio a lavorare su variabili di tipo intero...il programma crasha, ma il compilatore non da errori...

    Non dormirò stanotte finquando non lo avrò completato




    #include <stdio.h>
    #include <stdlib.h>
    #define LUNGNOM 30
    typedef struct dipendenti {
    char NomeCognome[LUNGNOM];
    char Codice[9];
    short ore;
    float media;
    } s_di;


    void main()
    {
    int i;
    short sup;
    s_di impiegati;
    FILE *fp;
    char NomCog[LUNGNOM], Cod[9];


    //Apertura del file con controllo
    if(( fp=fopen("impiegati.dat", "wb"))==NULL)
    {
    puts("Errore nell'apertura del file");
    exit(1);
    }
    //In caso di esito positivo


    printf("Inserisci il Nome e Cognome dell'impiegato: ");
    gets(impiegati.NomeCognome);
    fseek(fp,0,SEEK_SET);
    fwrite(impiegati.NomeCognome, sizeof(char), LUNGNOM, fp);
    printf("\nInserisci l'ID dell'impiegato (ccc/cccc): ");
    gets(impiegati.Codice);
    fseek(fp,LUNGNOM,SEEK_SET);
    fwrite(impiegati.Codice, sizeof(char), 9, fp);
    printf("\nInserisci le ore di lavoro: ");
    scanf("%hd",impiegati.ore);
    fseek(fp,LUNGNOM+9,SEEK_SET);
    fwrite(impiegati.ore, sizeof(short),1,fp);

    fclose(fp);




    //Apertura del file con controllo
    if(( fp=fopen("impiegati.dat", "rb"))==NULL)
    {
    puts("Errore nell'apertura del file");
    exit(1);
    }
    fseek(fp,0,SEEK_SET);
    fread(NomCog, sizeof(char), LUNGNOM, fp);
    puts(NomCog);
    fseek(fp, 30, SEEK_SET);
    if(fread(Cod, sizeof (char), 8, fp)!=8)
    puts("ERRORE!!");
    puts(Cod);
    fseek(fp,LUNGNOM+9,SEEK_SET);
    fread(&sup,sizeof(short),1,fp);
    printf("%hd\n", sup);


    fclose(fp);



    system("PAUSE");
    }
    Ora apparantemente il programma sembra funzionare fino allo scanf che inserisce il dato di tipo short in impiegati.ore...Perchè il programma crasha dopo averlo inserito...quindi può essere che in realtà il problema sia proprio nella scanf



    Lo so vi devono fare santi con me

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Ho notato che se uso Ore come tipo INT...il programma non da errori...quindi c'è qualche problema con il tipo SHORT..

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 © 2024 vBulletin Solutions, Inc. All rights reserved.