Pagina 2 di 5 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 47
  1. #11
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho fatto cosi, ma a quanto pare non mi scrive il file, dove sbaglio?
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define maxchar 20
    #define N 2
    /*
     *
     *
     * 
     */
    
    
    struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    };
    
    int main ()
    {
    
        int i;
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
        
            /*Crea file ad accesso casuale*/
    	FILE * cfPtr;
    	struct assegnazione ass = { 0, "", "", 0};
    
    	if ((cfPtr = fopen ( "proprietà.dat" , "wb" )) == NULL){
            printf("Il file non può essere aperto");
            }else
            {
                for (i = 0; i < N; i++){
                    fwrite (&ass, sizeof(struct assegnazione), 1, cfPtr);
                    }
                fclose (cfPtr);
            }
    
            if ((cfPtr = fopen ("proprietà.dat", "rb+")) == NULL){
                printf ("Il file non può essere aperto");
            }else
            {
                printf ("Inserisci numero app, cognome, nome, settimana : \n");
                printf ("Inserisci EOF per terminare l'inserimento \n");
                scanf ("%d%s%s%d", &num, nome, cognome, &set);
                
                while (!feof(stdin)){
                fwrite (&ass , 1 , sizeof( struct assegnazione ) , cfPtr );
                scanf ("%d%s%s%d", &num, nome, cognome, &set);
                }
            fclose(cfPtr);
            }
            return 0;
            }

  2. #12
    non si capisce assolutamente cosa vuoi fare
    codice:
    
    #include <stdio.h>
    
    #define maxchar 20
    #define N 10
    
    struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    };
    
    int main ()
    {
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
     	
    	FILE * cfPtr;
    	struct assegnazione ass ;
      
    	cfPtr = fopen ( "proprietà.dat" , "a" );
    
    	printf ("Inserisci numero app, cognome, nome, settimana : \n");
    	printf ("Inserisci EOF per terminare l'inserimento \n");
               
    	while (!feof(stdin)){
    		
    		scanf ("%d%s%s%d", &num, nome, cognome, &set );
    				
    		ass.Numero_appartamento = num; 
    		strcpy(ass.Nome_Proprietario, nome);
    		strcpy(ass.Cognome_Proprietario, cognome);
    		ass.Settimana_acquistata=set;
    		
    		fwrite (&ass , 1 , sizeof( struct assegnazione ) , cfPtr );
    	}
    	
    	fclose ( cfPtr );
    	
    	
    	
    	// leggo il primo record del file, tanto per farti vedere come si fa
    	cfPtr = fopen ( "proprietà.dat" , "r" );
    
                
    	size_t n = fwrite (&ass , 1 , sizeof( struct assegnazione ) , cfPtr );
    		
    	printf ("%d%s%s%d", ass.Numero_appartamento, 
    				ass.Nome_Proprietario, 
    				ass.Cognome_Proprietario, 
    				ass.Settimana_acquistata);
    	
    	fclose ( cfPtr );
    	
    	
    	
    	return ( 0 );
    
    }
    prova a studiarti l'esempio sopra
    ciao
    sergio

  3. #13
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho aggiustato in questo modo..ma non capisco se mi scrive sempre nella stessa posizione del file..chi mi sa dire?
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define maxchar 20
    #define N 2
    /*
     *
     *
     * 
     */
    
    
    struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    };
    
    int main ()
    {
    
        int i;
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
        
            /*Crea file ad accesso casuale*/
    	FILE * cfPtr;
    	struct assegnazione ass = { 0, "", "", 0};
    
    	if ((cfPtr = fopen ( "proprietà.dat" , "wb" )) == NULL){
            printf("Il file non può essere aperto");
            }else
            {
                for (i = 0; i < N; i++){
                    fwrite (&ass, sizeof(struct assegnazione), 1, cfPtr);
                    }
                fclose (cfPtr);
            }
    
            if ((cfPtr = fopen ("proprietà.dat", "rb+")) == NULL){
                printf ("Il file non può essere aperto");
            }else
            {
                printf ("Inserisci numero app, cognome, nome, settimana : \n");
                printf ("Inserisci EOF per terminare l'inserimento \n");
                fscanf (stdin, "%d%s%s%d", &ass.Numero_appartamento, ass.Nome_Proprietario, ass.Cognome_Proprietario, &ass.Settimana_acquistata);
                
                while (!feof(stdin)){
                fwrite (&ass , sizeof( struct assegnazione ) ,1, cfPtr );
                fscanf (stdin, "%d%s%s%d", &ass.Numero_appartamento, ass.Nome_Proprietario, ass.Cognome_Proprietario, &ass.Settimana_acquistata);
                }
            fclose(cfPtr);
            }
            return 0;
            }

  4. #14
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    nell'ultimo
    creo la struttura nel file con elementi di default
    poi inserisco i dati nel file (seguendo il formato dlla struttura)..è giusto?

  5. #15
    Originariamente inviato da jurij7
    nell'ultimo
    creo la struttura nel file con elementi di default
    poi inserisco i dati nel file (seguendo il formato dlla struttura)..è giusto?
    se ti riferisci al tuo ultimo listato non fa quello che vuoi fargli fare ed è quindi sbagliato.
    Riguardati quello che ti ho postato e ragiona su quella traccia.
    ciao
    sergio

  6. #16
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ecco quello che devo fare
    descrizione del problema

    Un villaggio vacanze necessita di un programma per gestire l'assegnazione di un gruppo di case in multiproprietà.

    Un file ("proprietà.dat") contiene le informazioni relative all'assegnazione in strutture (variabile assegnazione) del tipo mostrato di seguito :

    Numero_appartamento | Nome_Proprietario | Cognome_Proprietario | Settimana_acquistata

    Il programma richiesto dal villaggio deve consentire di visualizzare il nome ed il cognome del proprietario, dato il numero di appartamento e la struttura acquistata.

    Si realizzi tale programma secondo le seguenti specifiche :

    1. caricare i dati dal file in memoria centrale prima di effettuare qualsiasi operazione su di essi;
    2. utilizzare la ricerca dicotomica per la visualizzazione dei dati relativi ai propritari.


    Quello che non capisco è se il file devo scriverlo con fwrite o fprintf e di conseguenza leggerlo con fread o fscanf.

    Nel caso di fwrite e fread dovrei utilizzare una struttura per il file ed un'altra struttura per la memorizzazione in memoria centrale

    Non capisco...mi aiutate?

    Quello che non capisco è appunto...come devo scrivere/leggere i dati nel file se con fprintf/fscanf o fwrite/fread

  7. #17
    i file aperti con fopen si scrivono con fwrite e si leggono con fread
    Ti ho inserito la lettura del file e qualche commento
    codice:
    
    #include <stdio.h>
    
    #define maxchar 20
    #define N 10
    
    struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    };
    
    int main ()
    {
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
     	
    	FILE * cfPtr;
    	struct assegnazione ass ;
      
    	/* apre il file in modalità append, se non esiste lo crea */
    	cfPtr = fopen ( "proprietà.dat" , "a" );
    
    	printf ("Inserisci numero app, cognome, nome, settimana : \n");
    	printf ("Inserisci EOF per terminare l'inserimento \n");
                
    	scanf ("%d%s%s%d", &num, nome, cognome, &set );
    	while (!feof(stdin)){
    		
    		ass.Numero_appartamento = num; 
    		
    		/* copiamo i dati dallo stdin nella struttura */
    		/* le stringhe di caratteri si copiano con strcpy */
    		strcpy(ass.Nome_Proprietario, nome);
    		strcpy(ass.Cognome_Proprietario, cognome);
    		
    		ass.Settimana_acquistata=set;
    		
    		/* appende il record nel file */
    		fwrite (&ass , 1 , sizeof( struct assegnazione ) , cfPtr );
    	
    		scanf ("%d%s%s%d", &num, nome, cognome, &set );
    	
    	}
    	
    	fclose ( cfPtr );
    	
    	printf ("**************************\n");
    	
    	
    	/* apre il file in lettura */
    	cfPtr = fopen ( "proprietà.dat" , "r" );
    
    	// leggo il record uno per uno
    	/*
    		potrei anche leggere tutto il file in una sola istruzione
    	*/
    	while( fread (&ass , 1 , sizeof( struct assegnazione ) , cfPtr ) != 0 )  {
    			printf ("%d\n%s\n%s\n%d\n", ass.Numero_appartamento, 
    					ass.Nome_Proprietario, 
    					ass.Cognome_Proprietario, 
    					ass.Settimana_acquistata);
       	}
    	
    
    	fclose ( cfPtr );
    	
    	
    	
    	return ( 0 );
    
    }

  8. #18
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    io ho fatto così..ma cmq ho il dubbio che non rispetti le richieste del problema..secondo voi?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define maxchar 20
    #define N 2
    
    
    
    int main ()
    {
        struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    }ass[N];
    
        int i,j;
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
        int appcerc, settcerc;
        
            /*Crea file ad accesso casuale*/
    	FILE * cfPtr;
    	
    
    	if ((cfPtr = fopen ( "proprietà.dat" , "w" )) == NULL){
            printf("Il file non può essere aperto");
            }
            else{
                printf ("Inserisci numero app, cognome, nome, settimana : \n");
                printf ("Inserisci EOF per terminare l'inserimento \n");
                scanf ("%d%s%s%d", &num, nome, cognome, &set);
    
    	while (!feof(stdin)){
    	fprintf (cfPtr, "%d %s %s %d\n", num, nome, cognome, set);
            scanf ("%d%s%s%d", &num, nome, cognome, &set);
                    }
                fclose (cfPtr);
            }
    
            if ((cfPtr = fopen ("proprietà.dat", "r")) == NULL){
                printf ("Il file non può essere aperto");
            }
            else{
                i = 0;
                fscanf (cfPtr, "%d%s%s%d", &num, nome, cognome, &set);
                ass[i].Numero_appartamento = num;
                strcpy(ass[i].Nome_Proprietario,nome);
                strcpy(ass[i].Cognome_Proprietario, cognome);
                ass[i].Settimana_acquistata = set;
                i++;
                while (!feof(cfPtr)){
                    const aResult = fscanf (cfPtr,"%d%s%s%d", &num, nome, cognome, &set);
                    if (aResult != -1){
                    ass[i].Numero_appartamento = num;
                    strcpy(ass[i].Nome_Proprietario,nome);
                    strcpy(ass[i].Cognome_Proprietario, cognome);
                    ass[i].Settimana_acquistata = set;
                    i++;
                }
                }
            fclose(cfPtr);
            }
    
            printf("Inserisci il numero dell'appartamento e la settimana acquistata\n");
            scanf ("%d%d", &appcerc, &settcerc);
    
            for (j = 0; j < i; j++){
    			if (ass[j].Numero_appartamento == appcerc){
    				if(ass[j].Settimana_acquistata == settcerc){
                printf ("\nNome proprietario : %s", ass[j].Nome_Proprietario);
                printf ("\nCognome proprietario : %s", ass[j].Cognome_Proprietario);
            }
    			}
    		}
    		system("PAUSE");
    
            return 0;
            }

  9. #19
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    Originariamente inviato da mondobimbi
    i file aperti con fopen si scrivono con fwrite e si leggono con fread
    Ti ho inserito la lettura del file e qualche commento
    codice:
    
    #include <stdio.h>
    
    #define maxchar 20
    #define N 10
    
    struct assegnazione{
        int Numero_appartamento;
        char Nome_Proprietario[maxchar];
        char Cognome_Proprietario[maxchar];
        int Settimana_acquistata;
    };
    
    int main ()
    {
        int num, set;
        char nome[maxchar];
        char cognome[maxchar];
     	
    	FILE * cfPtr;
    	struct assegnazione ass ;
      
    	/* apre il file in modalità append, se non esiste lo crea */
    	cfPtr = fopen ( "proprietà.dat" , "a" );
    
    	printf ("Inserisci numero app, cognome, nome, settimana : \n");
    	printf ("Inserisci EOF per terminare l'inserimento \n");
                
    	scanf ("%d%s%s%d", &num, nome, cognome, &set );
    	while (!feof(stdin)){
    		
    		ass.Numero_appartamento = num; 
    		
    		/* copiamo i dati dallo stdin nella struttura */
    		/* le stringhe di caratteri si copiano con strcpy */
    		strcpy(ass.Nome_Proprietario, nome);
    		strcpy(ass.Cognome_Proprietario, cognome);
    		
    		ass.Settimana_acquistata=set;
    		
    		/* appende il record nel file */
    		fwrite (&ass , 1 , sizeof( struct assegnazione ) , cfPtr );
    	
    		scanf ("%d%s%s%d", &num, nome, cognome, &set );
    	
    	}
    	
    	fclose ( cfPtr );
    	
    	printf ("**************************\n");
    	
    	
    	/* apre il file in lettura */
    	cfPtr = fopen ( "proprietà.dat" , "r" );
    
    	// leggo il record uno per uno
    	/*
    		potrei anche leggere tutto il file in una sola istruzione
    	*/
    	while( fread (&ass , 1 , sizeof( struct assegnazione ) , cfPtr ) != 0 )  {
    			printf ("%d\n%s\n%s\n%d\n", ass.Numero_appartamento, 
    					ass.Nome_Proprietario, 
    					ass.Cognome_Proprietario, 
    					ass.Settimana_acquistata);
       	}
    	
    
    	fclose ( cfPtr );
    	
    	
    	
    	return ( 0 );
    
    }
    In questo modo..nella fase di lettura devo contemporaneamente scriverli (in memoria) in una ulteriore struct e poi da li cercare i dati che voglio...giusto?

  10. #20
    puoi leggere tutto il file e memorizzarlo in un vettore di assengnazione.
    Questa è una possibilità
    codice:
    ...
    	printf ("**************************\n");
    	
    	
    	/* apre il file in lettura */
    	cfPtr = fopen ( "proprietà.dat" , "r" );
    
    	// ottengo la dimensione del  file 
    	fseek (cfPtr , 0 , SEEK_END);
    	size_t size = ftell (cfPtr);
    	rewind (cfPtr);
    
    	// calcolo il numero di record che ci sono
    	unsigned int n_record = size / sizeof( struct assegnazione );
    	
    	// alloco la memoria per tutto il file
    	struct assegnazione *buffer = (struct assegnazione *) malloc (sizeof( struct assegnazione ) * n_record );
    	if (buffer == NULL) {fputs ("Errore di memoria",stderr); exit (2);}
    
    	fread (buffer , n_record , sizeof( struct assegnazione ) , cfPtr ) ;
    	
    	int i;
    	for ( i=0; i < n_record; i++)
    			printf ("%d\n%s\n%s\n%d\n", buffer[i].Numero_appartamento, 
    					buffer[i].Nome_Proprietario, 
    					buffer[i].Cognome_Proprietario, 
    					buffer[i].Settimana_acquistata);
    	
    
    	fclose ( cfPtr );
    	
    ...
    sostituiscilo pari pari alla parte di lettura

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