PDA

Visualizza la versione completa : [C++] Errore di visualizzazione dell'output in formato testo


Redragon91
18-10-2011, 11:41
In questo semplice programma di prova cercavo di interagire con i file e le classi, ma ho notato il bisogno di dover troncare determinate stringhe ed ho buttato gi questo codice...che durante l'inserimento sembra funzionare.
Ma provate a vedere l'OUTPUT da terminale! La visualizzazione strana in quanto fonde la stringa ID con la stringa nome cio:
Output finale ...che alquanto strano

Inserisci la dimensione del vettore di fatture da creare: 1
Inserisci l'ID: IDTROPPOLUNGO
L'ID da troncare e': IDTROPPOLUNGO
L'ID troncato e': IDTRO
Inserisci il nome cliente: HtmlForum.it
Inserisci l'importo: 999.99
...// LETTURA FILE
La dimensione del file e': 1
ID:IDTROHtmlForum.it
Cliente:HtmlForum.it
Data:Oct 18 2011
Importo:999.99
Press any key to continue



Inserimento nella classe:

class fatture{
public:
char ID[5];
char cliente[100];
float importo;
char data[10];
fatture();
};

fatture::fatture(){
strcpy(ID,"x");
strcpy(cliente,"non inserito");
strcpy(data,__DATE__);
importo=0;
}
...//allocazione dinamica vettore di classi
for(int i=0;i<dim;i++){

puts("Inserisci l'ID: ");

cin.sync();

cin.getline(str,100);

cout<<"L'ID da troncare e': "<<str<<endl;

for(int j=0;j<5;j++) v[i].ID[j]=str[j];

v[i].ID[5]='\0';

cout<<"L'ID troncato e': "<<v[i].ID<<endl;

puts("Inserisci il nome cliente: ");

cin.sync();

cin.getline(v[i].cliente,100);

puts("Inserisci l'importo: ");

cin>>v[i].importo; }

Visualizzazione successiva del file:


fp=fopen("fatture.dat","rb");
fseek(fp,-sizeof(dim),SEEK_END);
fread(&dim,sizeof(dim),1,fp);
rewind(fp);
cout<<"La dimensione del file e': "<<dim<<endl;
fread(v,sizeof(fatture)*dim,1,fp);

for(i=0;i<dim;i++){
printf(" ID:%s\n Cliente:%s\n Data:%s\n Importo:%g\n",v[i].ID,v[i].cliente,v[i].data,v[i].importo);
}


grazie in anticipo per ogni eventuale aiuto :)

oregon
18-10-2011, 11:46
Il campo ID come fatto?

Redragon91
18-10-2011, 11:48
classe + costruttore :)

class fatture{
public:
char ID[5];
char cliente[100];
float importo;
char data[10];
fatture();
};

fatture::fatture(){
strcpy(ID,"x");
strcpy(cliente,"non inserito");
strcpy(data,__DATE__);
importo=0;
}

oregon
18-10-2011, 11:50
Quindi sbagliato scrivere

v[i].ID[5]='\0';

dato che i caratteri vanno da indice 0 a indice 4

Redragon91
18-10-2011, 11:52
Ho scritto:

v[i].ID[4]='\0';

e funziona XD giusto pensavo fosse di 6 la grandezza O.O


GRAZIE MILLE :D potete chiudere :P

oregon
18-10-2011, 11:53
Originariamente inviato da Redragon91

GRAZIE MILLE :D potete chiudere :P

Di nulla ... (non necessario chudere ...)

Loading