Buon pomeriggio sto provando a fare questo esercizio:
Un file contiene l’elenco degli ingredienti di una ricetta con i relativi pesi, nel seguente formato:
ingrediente unità di misura quantità
Le unità di misura possibili sono l (litri), g (grammi) e u (unità).
Il formato prevede l’inserimento di commenti nel file mediante il carattere ’#’ che deve precedere il testo del commento. Il commento termina alla fine della riga.
Si scriva un programma in C che letto unl file sorgente contenente i commenti, che ha estensione .tic, scriva un file con il medesimo nome ma estensione .toc contenente soltanto gli ingredienti e non i commenti.
Allego la mia soluzione e spiego in seguito il problema:
Main.c
funzioni.h
metodi.c
Il problema che li stampa cosí:
Sapete aiutarmi a capire cosa sbaglio grazie in anticipo
Un file contiene l’elenco degli ingredienti di una ricetta con i relativi pesi, nel seguente formato:
ingrediente unità di misura quantità
Le unità di misura possibili sono l (litri), g (grammi) e u (unità).
Il formato prevede l’inserimento di commenti nel file mediante il carattere ’#’ che deve precedere il testo del commento. Il commento termina alla fine della riga.
Si scriva un programma in C che letto unl file sorgente contenente i commenti, che ha estensione .tic, scriva un file con il medesimo nome ma estensione .toc contenente soltanto gli ingredienti e non i commenti.
#ingredienti per il ciambellone
latte l 0.25
farina g 300
olio l 0.05 # un cucchiaio
uova u 2
burro g 50
yogurt g 50 # yogurt bianco
# buon appetito
latte l 0.25
farina g 300
olio l 0.05 # un cucchiaio
uova u 2
burro g 50
yogurt g 50 # yogurt bianco
# buon appetito
latte l 0.25
farina g 300
olio l 0.05
uova u 2
burro g 50
yogurt g 50
farina g 300
olio l 0.05
uova u 2
burro g 50
yogurt g 50
Allego la mia soluzione e spiego in seguito il problema:
Main.c
C:
#include <stdio.h>
#include <stdlib.h>
#include "funzioni.h"
int main(void){
FILE * fp;
struct Cibi * lista=NULL;
fp=fopen("ingredienti.tic","r");
if(fp!=NULL){
printf("Leggo i dati dal file \"%s\"..\n","ingredienti.tic");
lista=leggiFile(fp);
fclose(fp);
stampaLista(lista,stdout);
fp = fopen("ingredienti.toc","w");
scriviFile(fp,lista);
fclose(fp);
}
return 0;
}
funzioni.h
C:
#ifndef funzioni_h
#define funzioni_h
#include <stdio.h>
#define MAXLEN 10
struct Cibi{
char ingredienti[MAXLEN];
char unitaDiMisura[1];
float quantita;
struct Cibi *next;
};
struct Cibi *leggiFile(FILE * input);
struct Cibi *inserisciCoda(struct Cibi * lista, struct Cibi * Cibi);
void stampaLista(struct Cibi * lista, FILE *stream);
void scriviLista(struct Cibi *lista);
void scriviFile(FILE *fp, struct Cibi *lista);
#endif
metodi.c
C:
#include "funzioni.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Cibi * leggiFile(FILE * input){
struct Cibi *tmp, *lista=NULL;
while(!feof(input)){
tmp=(struct Cibi*)malloc(sizeof(struct Cibi));
fscanf(input,"%s\t %s\t %f\t ",tmp->ingredienti,tmp->unitaDiMisura,&tmp->quantita);
lista=inserisciCoda(lista,tmp);
}
return lista;
}
struct Cibi * inserisciCoda(struct Cibi * lista, struct Cibi * Cibi){
if(lista==NULL){
Cibi->next=lista;
return Cibi;
}
lista->next=inserisciCoda(lista->next,Cibi);
return lista;
}
void stampaLista(struct Cibi * lista, FILE *stream){
fprintf(stream,"\nStampa della lista:\n\n");
while(lista!=NULL){
fprintf(stream,"%s\t %s\t %2.2f\t\n",lista->ingredienti,lista->unitaDiMisura,lista->quantita);
lista=lista->next;
}
fprintf(stream,"\nFine della stampa\n");
return;
}
void scriviLista(struct Cibi *lista)
{
while (lista!=NULL) {
printf("%s\t %s\t %f\t\n",lista->ingredienti,lista->unitaDiMisura,lista->quantita);
lista = lista->next;
}
printf("\n");
}
void scriviFile(FILE *fp, struct Cibi *lista)
{
while (lista!=NULL) {
fprintf(fp,"%s\t %s\t %f\t\n",lista->ingredienti,lista->unitaDiMisura,lista->quantita);
lista = lista->next;
}
}
Il problema che li stampa cosí:
Sapete aiutarmi a capire cosa sbaglio grazie in anticipo