Newsgroup: it.comp.lang.c
Titolo: Memorizzazione di dati


free software&GNU/Linux 4ever! ;-)
            _           _        _          
 _ __  __ _| |_ _ _ ___| |__ _ _(_)_ ____ _ 
| '  \/ _` |  _| '_/ _ \ '_ \ '_| \ V / _` |
|_|_|_\__,_|\__|_| \___/_.__/_| |_|\_/\__,_|
 
 

 and released under the GPLv3 \n");
				break;
		}
	}while (scelta != 0);			
	return 0;
}
 
 
 
/* Books */
 
void books ()
{
	int scelta;
 
	do	
	{	do	
		{	printf ("What do you want to do?:\n");
			printf ("[1] Add a book \n");
			printf ("[2] List of books \n");
			printf ("[3] Find a book \n");
			printf ("[0] Go back\n");
			scanf ("%d", &scelta);
		}while (scelta < 0 || scelta > 3);
 
		switch (scelta)
		{
			case 1:
			{	bookAdd();
				break;
			}
			case 2:
			{	bookList();
				break;
			}
			case 3:
			{	bookFind();
				break;
			}
 
		}
	}while (scelta != 0);
}
	/* Aggiungo un libro */
void bookAdd ()
{
 
  printf (" ADD A BOOK: \n");
  gets (nulla);
  /*Title*/
  printf (" TITLE: \t");
  gets (mediaTitle);
  printf ("\n");
  /*Author*/
  printf (" AUTHOR: \t");
  gets (mediaAuthor);
  printf ("\n");
  /*Year*/
  printf (" YEAR: \t");
  gets (mediaYear);
  printf ("\n");
  /*Publishing house*/
  printf (" PUBLISHING HOUSE:: \t");
  gets (mediaPub_house);
  printf ("\n");
  /*Genre*/
  printf (" GENRE: \t");
  gets (mediaGenre);
  printf ("\n");
  /*Price*/
  printf (" PRICE: \n");
  gets (mediaPrice);
  /*Notes*/
  printf (" NOTES: \n");
  gets (mediaNotes);
  printf ("All right?\n");
  strcpy(bookItem.title, mediaTitle);
  strcpy(bookItem.author, mediaAuthor);
  strcpy(bookItem.year, mediaYear);
  strcpy(bookItem.pub_house, mediaPub_house);
  strcpy(bookItem.genre, mediaGenre);
  strcpy(bookItem.price, mediaPrice);
  strcpy(bookItem.notes, mediaNotes);
	bookFileWrite = fopen("books.dat", "a");
	fwrite( &bookItem, sizeof(bookItem), 10000, bookFileWrite );
	fclose(bookFileWrite);
printf ("Done!\a");
}
 
void bookList ()
{
	bookFileRead = fopen("books.dat", "r");
 
	while ( !feof(bookFileRead) ) 
	{
		if (fread( &bookItem, sizeof(bookItem), 10000, bookFileRead )) 
		{
			printf("=========================\n");
			printf("Title : %s\n", bookItem.title);
			printf("Author : %s\n", bookItem.author);
			printf("Year : %s\n", bookItem.year);
			printf("Publishing House : %s\n", bookItem.pub_house);
			printf("Genre : %s\n", bookItem.genre);
			printf("Notes : %s\n", bookItem.notes);
		}
	}
 
	fclose(bookFileRead);
}
 
void bookFind ()
{
	printf ("Title::\n");
}
 
/* Films */
 
void films ()
{
	int scelta;
 
	do	
	{	do	
		{	printf ("What do you want to do?:\n");
			printf ("[1] Add a film \n");
			printf ("[2] List of films \n");
			printf ("[3] Find a film \n");
			printf ("[0] Go back\n");
			scanf ("%d", &scelta);
		}while (scelta < 0 || scelta > 3);
 
		switch (scelta)
		{
			case 1:
			{	filmAdd();
				break;
			}
			case 2:
			{	filmList();
				break;
			}
			case 3:
			{	filmFind();
				break;
			}
 
		}
	}while (scelta != 0);
}
	/* Aggiungo un film */
void filmAdd ()
{
	printf ("Title::\n");
}
 
void filmList ()
{
	printf ("Title::\n");
}
 
void filmFind ()
{
	printf ("Title::\n");
}
 
/* Musics */
 
void musics ()
{
	int scelta;
 
	do	
	{	do	
		{	printf ("What do you want to do?:\n");
			printf ("[1] Add a music \n");
			printf ("[2] List of musics \n");
			printf ("[3] Find a music \n");
			printf ("[0] Go back\n");
			scanf ("%d", &scelta);
		}while (scelta < 0 || scelta > 3);
 
		switch (scelta)
		{
			case 1:
			{	musicAdd();
				break;
			}
			case 2:
			{	musicList();
				break;
			}
			case 3:
			{	musicFind();
				break;
			}
 
		}
	}while (scelta != 0);
}
	/* Aggiungo un supporto musicale */
void musicAdd ()
{
	printf ("Title::\n");
}
 
void musicList ()
{
	printf ("Title::\n");
}
 
void musicFind ()
{
	printf ("Title::\n");


Ciao,
mi diresti la dimensione del file che produci con l'inserimento di 2 o 3 
libri (books.dat), per cortesia?

 Dove sbaglio?
 
Ti hanno già risposto ma in maniera più esplicita: stai scrivendo e 
leggendo 10000 volte ogni record in bookAdd e bookList.
 
Le variabili globali sono tipo Books per tutti e tre i tipi di entità 
che tratti.
 
Se compili con -Wall dovresti vedere anche alcuni warning.

 all'accensione del calcolatore.
 
Io stavo per dare una risposta meno draconiana, ma da
quando ho "scoperto" SQLite, anni fa, non saprei vivere
senza! Però certo, uno può pure reinventare la ruota per
esercizio, e in certi contesti può essere una buona cosa
da fare.
 
ciao!
 
Apx.
 


Quello della quantità di dati che vai a scrivere non è l'unico problema; 
se non gestisci file di testo puri, e quindi vai a scrivere nel file 
anche valori binari tipo int, float, ecc. è bene che tu lo specifichi 
durante l'apertura del file nella modalità di apertura aggiungendo il 
carattere 'b'. Ti ho preparato un esempietto che, spero, ti chiarirà ciò 
che ho tentato di spiegarti a parole:
 
#include <stdio.h>
#include <string.h>
 
int main(void);
int main()
{
         FILE *fp;
         int i;
 
         static struct {
             char  a[20];
             char  b[30];
             int   c;
             long  d;
             float e;
             char  f[20];
         } rec = {
             "campo a",
             "campo b",
             3,
             4,
             5.5,
             "campo f (finale)"
         }, rec_in;
 
         printf("\nCampo a: %s"
                "\nCampo b: %s"
                "\nCampo c: %d"
                "\nCampo d: %ld"
                "\nCampo e: %f"
                "\nCampo f: %s"
                "\n", rec.a, rec.b, rec.c, rec.d, rec.e, rec.f);
 
         if((fp = fopen("zz.dat", "wb")) == (FILE *)NULL)
             return 1;
 
         for(i = 0; i < 10; i++)
             fwrite(&rec, sizeof rec, 1, fp);
 
         fclose(fp);
 
         if((fp = fopen("zz.dat", "rb")) == (FILE *)NULL)
             return 1;
 
         i = 0;
         while(fread(&rec_in, sizeof rec_in, 1, fp)){
             printf("\n%02d)"
                    "\nCampo a: %s"
                    "\nCampo b: %s"
                    "\nCampo c: %d"
                    "\nCampo d: %ld"
                    "\nCampo e: %f"
                    "\nCampo f: %s"
                    "\n", ++i, rec_in.a, rec_in.b,
                               rec_in.c, rec_in.d,
                               rec_in.e, rec_in.f);
         }
 
         fclose(fp);
}
 


 
eh eh... certo! basta ricordarsi di rilocarlo a C00 e buttarlo sul 
master boot record :-)
 


 
sigh... e vogliamo parlare dei vecchi tempi del DOS quando
era possibile scrivere direttamente sulla scheda video?
Che meraviglia, beh, quasi :D


B800:0 sigh...

 B800:0 sigh...
 
Io ricordo il mode 13h. 64 kb di bontà, in 320x240.


Non capisco se con 320x240 intendi una delle modalità grafiche oppure ti 
riferisci ad una scheda CGA perché in questo caso l'interrupt dovrebbe 
essere il 10h. Quello che, invece, mi ha colpito di più nell'evoluzione 
è, sicuramente stato lo spreco di spazio: secondo me oggi se realizzi un 
CV con word nel quale ci aggiungi una fototessera, in un vecchio floppy 
(1,2M) non riesci a farcelo stare. Ricordo un floppy che avevo sempre 
appresso; dentro ci avevo fatto stare:
- sistema (dos)
- comandi esterni del sistema utili (fdisk, format e pochi altri)
- gestore di memoria (qemm)
- driver per CD
- mini sistema di sviluppo (tasm, tlink, symdeb)
- editor (vi)
- giochi (tetris, 10rogue, chess)
- mi avanzavano 160KB
 
A voi non sembra che oggi sia così esagerato?
 
 

 ;)

  ;)
 >
 
Ma grazie! Non conoscevo. Lo provo si che lo provo! Per l'occasione mi 
compro anche la tastiera di pietra e lo ptero-mouse! :-))
 
 

 programma direttamente all'accensione del calcolatore.
[...]
 
he he :-)

 	char mediaNotes[ 1000 ];
[...]
 
#define MAX_STR 200
%s/200/MAX_STR/g
 
Consiglio: 
http://cm.bell-labs.com/cm/cs/tpop/index.html
 


Grazie, ora provo e vi faccio sapere ;-)



Ho risolto! Grazie.


 Ho risolto! Grazie.
 
Ottimo. Prossimo passo: il quote.
 
Ottantotto righe per una di payload…


In effetti ;-)
La prossima volta ci farò attenzione...
questa però è anche colpa dei PC troppo potenti e delle connessioni
ADSL... se ero collegato con il 386 e con modem 14400 non l'avrei MAI
fatto!!!
