[C] Aggiunta su file di testo.

di il
3 risposte

[C] Aggiunta su file di testo.

Ciao a tutti, devo risolvere un semplice problema a cui non trovo però soluzione.
Ho questo file di testo: menu.txt così composto

Piatto   KCalorie
pasta     1024
bistecca  1519
frutta     433
(piatto e KCalorie non ci sono nel file eh! )
devo aggiungere per ogni riga il prezzo, ovvero deve diventare così:

Piatto   KCalorie  Prezzo
pasta     1024       12
bistecca  1519       18
frutta     433        6

ovviamente il problema è che devo modificare le righe, non creare un nuovo file e rinnominarlo.
se apro il file modalità testo, e leggo le variabili di una riga con una
fscanf(fp,"%s %d",s,&d), riporto l'indicatore di posizione all'inizio della stessa riga, e la riscrivo con l'aggiunta:
fprintf(fp,"%s %d %d \n",s,d,12); la riga viene riscritta correttamente ma l'aggiunta mi sovrascrive caratteri della riga successiva..

Se apro il file in modalità append e lettura, riesco ad aggiungere testo nel file, ma soltano alla fine, nonostante sposti l'indicatore di posizione dove voglio..

Avete qualche idea?
Vi scrivo anche il testo dell'esercizio se vi è più utile: Leggere il file e stampare a video il menu dal main dopo la chiamata della funzione e riscriverlo modificato
con l’aggiunta per ogni riga del prezzo di vendita.

Grazie a tutti e scusate la lunghezza del post.

3 Risposte

  • Re: [C] Aggiunta su file di testo.

    Scusa se ti rispondo ora, ma non avevo visto questo messaggio.
    Allora april il file in modalità lettura, leggi il contenuto, chiudi il file. Lo riapri in modalità scrittura, volendo potevi aprire il file con entrambe le modalità, a te la scelta! e reinserisci i dati letti con l'aggiunta del prezzo.
  • Re: [C] Aggiunta su file di testo.

    Ti faccio un esempio che si adatta al tuo caso:
    
    #include <stdio.h>
    
    struct MENU
    {
    	char piatto[100];
    	long kcal;
    	long prezzo;
    };
    void stampa_menu(MENU * menu, int menu_len);
    
    int main()
    {
     FILE *fp;
     MENU menu[10];
     int i;
    	fp = fopen("C:\\menu.txt","r+");/*apro il file in modalitò scrittura e lettura*/
    	for (i=0;!feof(fp);i++)
    		fscanf(fp,"%s %d",menu[i].piatto,&menu[i].kcal);
    
    	stampa_menu(menu,i);
    
    	for(int y=0;y<i;y++)
    	{
    		printf("Inserisci il prezzo per il piatto %s:",menu[y].piatto);
    		scanf("%d",&menu[y].prezzo);
    	}
    	rewind(fp); /*mi posiziono all'inizio del file in modo tale da riscrivere tutto il file*/
    	for(int y=0;y<i;y++)
    		fprintf(fp,"%s %d %d\n",menu[y].piatto,menu[y].kcal, menu[y].prezzo);
    	fclose(fp);
    	return 1;
    }
    
    void stampa_menu(MENU * menu, int menu_len)
    {
    	/*stampo il menu*/
    	printf("Menu:\nPiatto\tKCalorie\n");
    	for(int i=0;i<menu_len;i++)
    		printf("%s\t%d\n",menu[i].piatto,menu[i].kcal);
    }
    
    cosi dovrebbe andare
  • Re: [C] Aggiunta su file di testo.

    Ciao a tutti sono nuovo in basa a questo argoento volevo chidervi un aiuto perchè sono davvero in crisi. Allore io vorrei fare un programma che mantenga memorizzati tutti i miei voti e che possa aggiungerli quando voglio e il prog vorrei che mi dasse na lista di materie mi faccia scegliere la materia a quel punto mi faccia visualiizare i voti e chiedermi se ho un altro voto da inserire e possa inserirlo emi faccia visualizzare tutti i voti della materia e la media dei voti e se alla domanda se ci sono altri voti gli dico di no mi riportasse allo stato di partenza. Io non riesco a farlo per ora ho fatto solo una lista con lo switch case e mi fa mettere solo un voto . Vi prego di aiutarmi anche se mi fate il lavoro con soltanto due materie poi le aggiungo tutte io, per favore è impo!!Aspetto vostr risposte grazie mille!!
Devi accedere o registrarti per scrivere nel forum
3 risposte