PDA

Visualizza la versione completa : [C] Errore scrittura file e crash durante la visualizzazione


giacomo199817
04-05-2018, 12:11
salve raga, in pratica sto lavorando con un array di struct ( per facilitarmi un po' nel progetto che sto facendo) e quando vado ad avviare il programma il primo problema e' che crea il file correttamente , ma non me lo tabula come dico io ( vorrei che mi uscissesse un cantante con le relative caratteristiche per riga ,ma e' come se non riconoscesse la \n), l altro problema e' che mi crasha durante la visualizzazione di tutta la struttura. Grazie per chi mi aiutera' ;)


#include <stdio.h>
#include <stdlib.h>
#include <string.h>


//costanti
#define maxautori 25
#define maxvet 21




//definisco la struttura autore
typedef struct {


int id;
char nome[maxautori];
char cognome[maxautori];
char nazionalita[maxautori];
char sesso[2];
char musica[maxautori];


}autori;


int main ()
{


autori vettaut[maxvet]={


{1, "bob ", "sinclair ","francese","m","house\0"},
{2, "michael ", "jackson ","americana","m","pop\0"},
{3, "loredana ", "berte' ","italiana","m","rock\0"},
{4, "albano ", "carrisi ","italiana","m","leggera\0"},
{5, "tim ", "bergling ","svedese","m","house\0"},
{6, "tiziano ", "ferro ","italiana","m","pop\0"},
{7, "fabrizio ", "tarducci ","italiana","m","rap\0"},
{8, "david ", "guetta ","francese","m","elettronica\0"},
{9, "sfera ", "ebbasta ","italiana","m","trap\0"},
{10, "gue' ", "pequeno ","italiana","m","rap\0"},
{11, "vittorio ", "dimango ","italiana","m","house\0"},
{12, "eros ","ramazzotti ","italiana","m","pop\0"},
{13, "antonello", "venditti ","italiana","m","leggera\0"},
{14, "fabrizio ", "deandre' ","italiana","m","leggera\0"},
{15, "capo ", "plaza", "italiana","m","trap\0"},
{16, "dark ", "pologang ","italiana","m","trap\0"},
{17, "sonny ", "skrillex ","americano","m","elettronica\0"},
{18, "boys ", "noize ","tedesco","m","elettronica\0"},
{19, "fabio ", "marracash ","italiana","m","rap\0"},
{20, "roger ", "waters ","inglese","m","rock\0"},
{21, "jimi ", "hendrix ","inglese","m","rock\0"}
};
int i;


FILE *fp;


fp=fopen("autori.dat","wb");
if(fp==NULL)
{
printf("errore\n");
}
else
for(i=0;i<maxvet;i++)
{
fprintf(fp,"\n\n %d \t %s \t %s \t %s \t %s \t %s\n\n",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);




}
fclose(fp);




if((fp=fopen("autori.dat","rb"))==NULL) {
printf("errore\n");
}
else
for(i=0;i<maxvet;i++)
{
fscanf(fp,"%d %s %s %s %s %s",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);
printf("%d %s %s %s %s %s \n",vettaut[i].id,vettaut[i].nome,vettaut[i].cognome,vettaut[i].nazionalita,vettaut[i].sesso,vettaut[i].musica);
printf("************************************************** *******************************************\n");
}
fclose(fp);


}

oregon
04-05-2018, 14:05
Come ti stato gi detto in altro thread, i dati non si inseriscono con gli spazi n si usa il \0
Ad esempio, la prima riga dovrebbe essere

{ 1, "bob", "sinclair","francese","m","house" },


Inoltre, se usi fprintf/fscanf non devi aprire il file in binario, quindi non usare wb/rb ma semplicemente w e r

Infine, il crash causato dalla fscanf in cui il primo parametro deve essere il puntatore al campo

fscanf(fp, "%d %s %s %s %s %s", &vettaut[i].id, vettaut[i].nome, vettaut[i].cognome, vettaut[i].nazionalita, vettaut[i].sesso, vettaut[i].musica);

giacomo199817
04-05-2018, 15:18
grazie per l aiuto, adesso funziona :D

Loading