Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C++] Errore di visualizzazione

    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:
    codice:
    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:
    codice:
    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Il campo ID come è fatto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    classe + costruttore
    codice:
    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;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Quindi è sbagliato scrivere

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

    dato che i caratteri vanno da indice 0 a indice 4
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Ho scritto:

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

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


    GRAZIE MILLE potete chiudere :P

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da Redragon91

    GRAZIE MILLE potete chiudere :P
    Di nulla ... (non è necessario chudere ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.