[c] file, strutture e... miglioramenti.

di il
1 risposte

[c] file, strutture e... miglioramenti.

Sera,
il seguente programma funziona discretamente se nel campo descrizione inserisco una sola parola:
#include <stdio.h>
#include <string.h>

typedef struct{
int codiceArticolo;
char descrizione[200];
float costoUnitario;
int numeroPezzi;
} articoli;

int main()
 {
 articoli art;
 char appoggio;
 int uscita=0;
 int res=0;

 FILE *fp;
 fp=fopen("esercizio_esame_gennaio_2022.txt", "w");

 do{
 printf("\n Inserisci il CODICE ARTICOLO: ");
 scanf("%d", &art.codiceArticolo);
 printf("\n CODICE ARTICOLO: %d", art.codiceArticolo);

 scanf("%c", &appoggio);

 printf("\n Inserisci il DESCRIZIONE: ");
 gets(art.descrizione);
 art.descrizione[sizeof(art.descrizione)-1] ='\0';
 puts(art.descrizione);


 printf("\n Inserisci il COSTO UNITARIO: ");
 scanf("%f", &art.costoUnitario);
 printf("\n COSTO UNITARIO %f", art.costoUnitario);

 printf("\n Inserisci il NUMERO DEI PEZZI: ");
 scanf("%d", &art.numeroPezzi);
 printf("\n NUMERO PEZZI: %d", art.numeroPezzi);

 if(!fp) printf("\n PROBLEMA NELL'APERTURA DEL FILE");
 else
 fprintf(fp, "%d %s %f %d ", art.codiceArticolo, art.descrizione, art.costoUnitario, art.numeroPezzi);

 printf("\n\nUscita?"); scanf("%d", &uscita);
}while(uscita!=1);
 fclose(fp);

  FILE *fp1;
fp1=fopen("esercizio_esame_gennaio_2022.txt", "r");

 if(!fp1) printf("\n PROBLEMA NELL'APERTURA DEL FILE");
 else{
 do{
fscanf(fp1, "%d %s %f %d ", &art.codiceArticolo, art.descrizione, &art.costoUnitario, &art.numeroPezzi);
 printf("%d %s %f %d ", art.codiceArticolo, art.descrizione, art.costoUnitario, art.numeroPezzi);
}while(!feof(fp1));
}
 fclose(fp1);


 return 0;
 }
Se al momento dell'inserimento dati nella seconda voce, descrizione (art.descrizione), inserisco una singola parola tipo "calzini" va tutto bene.
Se però inserisco qualcosa tipo "calzini bianchi" il programma non gira.
Ho pensato fosse un problema di terminatore di stringa e ho inserito
 art.descrizione[sizeof(art.descrizione)-1] ='\0';
ma... non gira lo stesso.
Come sistemare?

1 Risposte

  • Re: [c] file, strutture e... miglioramenti.

    Rimpiazza la
    gets(art.descrizione);
    con
    fgets(art.descrizione, 200, stdin);
    fgets legge anche il newline finale, che quindi dovrai strippare.
    I dati scritti su file in una sola riga sono poi illeggibili (fscanf usa gli spazi come delimitatore di campo, se hai una stringa con degli spazi fai saltare gli allineamenti dei campi). Usa il formato CSV oppure scrivi un campo per riga.
Devi accedere o registrarti per scrivere nel forum
1 risposte