Lettura di numeri reali da file
• Errori comuni:
while (fgetc (fp) != EOF) {
fscanf (fp, "%lf", &numero);
...
}
while (fscanf (fp, "%d", &numero) != EOF) {
...
}
NO: "consuma" il primo carattere!
NO: i valori sono reali. %lf!
Lettura della struct articolo da file
• Il formato è fisso (tipologia 2 della lezione "scelta dell’algoritmo")
int quantita;
char descrizione[32];
while (fscanf (fp, "%s %d", descrizione, &quantita) != EOF) {
strcpy (articoli[i].nome, descrizione);
articoli[i].q = quantita;
i++;
}
Oppure:
while (fscanf (fp, "%s %d", articoli[i].nome, &articoli[i].q) != EOF) {
i++;
}
Impostazione esercizio 3
• Magazzino: è vettore di struct dichiarato nel main e passato prima alla funzione di lettura del magazzino e poi alla funzione di ricerca degli articoli mancanti del
progetto:
struct articolo magazzino[100];
int dim_magazzino;
apri il file del magazzino...
dim_magazzino = leggi_magazzino (fp_magazzino, magazzino, 100);
chiudi il file...
apri il file del progetto...
stampa_articoli_mancanti (fp_progetto, magazzino, dim_magazzino);
Impostazione esercizio 3 (II)
• Cosa deve fare la funzione
stampa_articoli_mancanti ?stampa_articoli_mancanti (FILE *fp_progetto, struct articolo magazzino[], int dim_magazzino) {
/* per ogni riga del file progetto leggi il nome dell’articolo e la quantita` richiesta */
while (...
{
/* cerca l’articolo nel magazzino */
indice_articolo = cerca_in_magazzino (...
if (indice_articolo == -1) {
/* l’articolo non c’e`, stampa l’intera quantita` richiesta */
...
} else {
/* stampa la differenza tra la quantita` richiesta e la quantita` in magazzino, se tale differenza e` maggiore di zero */
...
} }
return;
}