Buonasera,
non riesco ad implementare un passaggio da file ad array di struct.
La situazione è questa.
Inserisco i dati e se mi limito ad una parola o un intero con fscanf e fprintf tutto fila.
Per rendere le cose più difficili ho voluto fare in modo che in autori si potessero inserire più parole.
Quasi tutto va bene: scrive su file più parole, ma quando devo raccogliere il tutto da file per stampare a video, non funziona.
Questo tutto il malloppo (come al solito c'è qualche variabile e printf in più che uso per "capire"):
#include <stdio.h>
#include <string.h>
typedef struct{
int codice;
char titolo[100];
char autori[100];
int lenautori;
int numeroCopieDisponibili;
int numeroScorta;
} libreria;
int main()
{
libreria lib;
libreria liba[100];
int uscita=0;
char appoggio;
int stampo=0;
int indice, len, i=0;
/*
FILE *fp;
fp=fopen("libreriabuonalettura.txt", "a");
do{
printf("\n\n");
printf("Inserisci il CODICE del libro:");
scanf("%d", &lib.codice);
printf("\n\n");
printf("Inserisci il TITOLO del libro:");
scanf("%s", lib.titolo);
scanf("%c", &appoggio);
printf("\n\n");
printf("Inserisci il AUTORI del libro:");
gets(lib.autori); ///////////////////////////////////////////////////////////////////////////////////
scanf("%c", &appoggio);
lib.lenautori=strlen(lib.autori);
printf("\n\n");
printf("Inserisci il NUMERO COPIE DISPONIBILI del libro:");
scanf("%d", &lib.numeroCopieDisponibili);
printf("\n\n");
printf("Inserisci il NUMERO COPIE SCORTA del libro:");
scanf("%d", &lib.numeroScorta);
fprintf(fp, "%d %s ", lib.codice, lib.titolo);
fputs(lib.autori, fp); //////////////////////////////////////////////////////////////////////////////
fprintf(fp, " %d %d %d ", lib.lenautori, lib.numeroCopieDisponibili, lib.numeroScorta);
printf("%d %s %s %d %d %d ", lib.codice, lib.titolo, lib.autori, lib.lenautori, lib.numeroCopieDisponibili, lib.numeroScorta);
printf("\n\n");
printf("Vuoi inserire un altro libro? Premi 1 per terminare l'inserimento:");
scanf("%d", &uscita);
}while(uscita!=1);
fclose(fp);
*/
printf("Stampo la tabella aggiornata?");
scanf("%d", &stampo);
if(stampo==1)
{
FILE *fp;
fp=fopen("libreriabuonalettura.txt", "r");
do{
fscanf(fp,"%d %s ", &liba[i].codice, liba[i].titolo);
//fscanf(fp,"%s ", liba[i].autori);
fgets(liba[i].autori, liba[i].lenautori, fp); //////////////////////////////////////////////////
fscanf(fp," %d %d %d ", &liba[i].lenautori, &liba[i].numeroCopieDisponibili, &liba[i].numeroScorta);
i++; indice=i;
}while(!feof(fp));
fclose(fp);
}//FINE IF
for(i=0; i<indice; i++){
printf("\n\n %d %s ", liba[i].codice, liba[i].titolo);
printf("%s ", liba[i].autori);
printf(" %d %d %d ", liba[i].lenautori, liba[i].numeroCopieDisponibili, liba[i].numeroScorta);
}
return 0;
}//FINE MAIN
Sono sicuro che il problema sia qui: fgets(liba
.autori, liba.lenautori, fp);
Mi sono inventato pure questa inutile variabile liba.lenautori per rendere la fgets funzionante ma... niente. Non capisco!
Grazie.