Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    C : Scrivere, leggere, sttampare a video un struttura dati

    struct str_data{
    int gg,mm,aa;
    };

    struct str_compet{
    int min,sec;
    };

    typedef struct {
    char nome[LUNG_S],cognome[LUNG_S];
    struct str_compet time[COMPET];
    struct str_data data;
    }str_atleti;

    dichiarata questa struttura nel main come

    str_atleti atleta;

    come posso effettuare le seguenti operazioni?

    scrittura su file, lettura da esso, stampa a video.
    (per quest'ultima è necessaria qualche operazione particolare oltre ad una semplice printf/puts dei dati?)
    Kill what might have been :sexpulp:
    Webmaster: a.galli85@virgilio.it

  2. #2
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Per leggere e scrivere devi servirti delle funzioni di accesso ai file binari del c, per visualizzare a video invece devi usare la printf di ogni membro della struttura, formattando l'output a tuo piacimento. Non c'è un metodo per stampare a video un'intera struttura, che io sappia.
    ChReAn
    -------------------

    Slackware 9.1 powered

  3. #3

  4. #4

    per la modifica?

    grazie per l'aiuto precendente ... nel mio programma c'è anche la possibilità di modificare e/o cancellare i dati presenti sul file dopo aver effettuato una ricerca, voi come mi consiglate di impostare il codice?

    per la ricerca nn c'è problema...ma il resto?
    Kill what might have been :sexpulp:
    Webmaster: a.galli85@virgilio.it

  5. #5
    allora:

    per modificare/cancellare

    potresti utilizzare 2 file

    il primo è il file rubrica che contiene tutti i record
    il secondo è un file fittizio (tmp) in cui trascriverai
    tutti i record presenti nel primo file (rubrica) eccetto
    il record da cancellare.

    Alla fine rinomini il file fittizio (tmp) con lo stesso nome
    del file origine (rubrica).

  6. #6
    ho creato questa funzione ma nn so perche nn funzica sapete trovare l'errore?

    void cerca(){
    int find=0; //DICHIARO LE VARIABILI DI RICERCA DI RICERCA
    char stringa[LUNG_S],com; //DICHIARO LA STRINGA DI RICERCA
    str_atleti atleta; //DICHIARO LA STRUTTURA DATI PER LA FUNZIONE
    FILE *idS,*idD; //DICHIARO IL PUNTATORE A FILE PER LA FUNZIONE
    do{
    clrscr();
    header("Ricerca atleta");
    printf("\n\t%c Nome o congnome : ",16); //ACQUISISCO LA STRINGA DA CERCARE
    gets(stringa);fflush(stdin);
    printf("\n\t-- Menu --\n\tA - Cancella\n\tB - Modifica");
    com=getche();
    }while(com != 'a' && com != 'b');
    idS=fopen(NOME_FILE,LEGGI); //APRO IL FILE SORGENTE IN LETTURA
    idD=fopen(NOME_TMP,CREA); //APRO IL FILE DESTINATARIO IN SCRITTURA
    checkF(idS,ERR1,1); //CONTROLLO L'APERTURA DEL FILE
    checkF(idD,ERR1,1); //CONTROLLO L'APERTURA DEL FILE
    if(com=='a')
    while(!feof(idS))
    {
    fread(&atleta,sizeof(str_atleti),1,idS);
    if(strcmp(stringa,atleta.n)!=0 && strcmp(stringa,atleta.c)!=0)
    fwrite(&atleta,sizeof(str_atleti),1,idD);
    else
    find=1;
    }
    else
    while(!feof(idS))
    {
    fread(&atleta,sizeof(str_atleti),1,idS);
    if(strcmp(stringa,atleta.n)==0 || strcmp(stringa,atleta.c)==0)
    {
    find=1;
    printf("\n\tNome : "); //CARICO I DATI IN MEMORIA
    gets(atleta.n);fflush(stdin);
    printf("\tCognome : ");
    gets(atleta.c);fflush(stdin);
    printf("\tGiorno di nascita : ");
    scanf("%d",&atleta.dt.gg);
    printf("\tMese di nascita : ");
    scanf("%d",&atleta.dt.mm);
    printf("\tAnno di nascita : ");
    scanf("%d",&atleta.dt.aa);
    }
    fwrite(&atleta,sizeof(str_atleti),1,idD);
    }
    fclose(idS); //CHIUDO IL FILE SORGENTE
    fclose(idD); //CHIUDO IL FILE DESTINATARIO
    remove(NOME_FILE); //ELIMINO IL FILE SORGENTE
    rename(NOME_TMP,NOME_FILE); //RINOMINO IL FILE DESTINATARIO
    }
    Kill what might have been :sexpulp:
    Webmaster: a.galli85@virgilio.it

  7. #7
    ok risolto ... ma mi rimane un ultimo problema

    la sintassi e la logica dei un ciclo tipo questo è giusta?

    while(!feof(idST))
    {
    fread(&atleta,sizeof(str_atleti),1,idST); //LEGGO LA STRUTTURA DATI SU FILE
    ST_NOME; //STAMPO LA STRUTTURA DATI SU FILE
    ST_DATA;
    getch();
    }

    nn so perche l'ultimo record viene letto 2 volte ... sigh!!!
    Kill what might have been :sexpulp:
    Webmaster: a.galli85@virgilio.it

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.