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?