Linguaggio C, scrivere sul file con tab

di il
4 risposte

Linguaggio C, scrivere sul file con tab

void Scrivi(FILE *f, struct studente STUDENTE[], struct esame ESAME[], int j)
{
	if( f == NULL ) 
		perror("Errore in apertura del file");
	else
	{
		if(j == 0)
			fprintf(f, "%s", "Matricola \t Nome \t Cognome \tEsame \t Voto \n");
		
		fprintf(f, "%d\t", STUDENTE[j].matricola);
		fprintf(f, "%s\t", STUDENTE[j].nome);
		fprintf(f, "%s\t", STUDENTE[j].cognome);
		fprintf(f, "%s\t", ESAME[j].nome_esame);
		fprintf(f, "%d\t", ESAME[j].voto);

	}
	
}
Sul file viene stampato questo:
Matricola 	 Nome 	 Cognome 	Esame 	 Voto 
0	Mario	Rossi	Analisi	28	
Non c'è un modo per "forzare" il tab e allineare le colonne? Grazie

4 Risposte

  • Re: Linguaggio C, scrivere sul file con tab

    Potresti scrivere una funzione che lavorando su un buffer temporaneo
    char temp[80];
    riempito di spazi (per la dimensione totale della riga) ci copi all'interno le varie stringhe usando strncpy(); per es. per scrivere alla posizione 10:
    strncpy( &temp[9], miastringa, strlen(miastringa));
    naturalmente ci devi mettere una serie di controlli come ad esempio che strlen(miastringa) non sia maggiore della dimensione a disposizione per il campo (eventualmente tronchi)
    Alla fine stampi temp.
  • Re: Linguaggio C, scrivere sul file con tab

    Prendo temp[80] e, dentro, dalla posizione numero 0 ci scrivo "Matricola".
    Nuovamente scrivo dentro temp dalla posizione strlen("Matricola") (che sono 9 "celle" di memoria del buffer perché ogni lettera, essendo di tipo char, ne occupa una) + che so, 5 celle vuote. Poi, una volta rifatto il calcolo dello spazio, memorizzo nel buf "Nome" e così via. Alla fine scrivo sul file temp.

    Quindi temp va utilizzata per ogni riga del file?

    Ho capito bene?
  • Re: Linguaggio C, scrivere sul file con tab

    Le posizioni sono fisse, non c'è bisogno di calcolarle.
    temp va utilizzato per ogni riga di dati.
    Naturalmente l'intestazione la puoi scrivere direttamente con una fprintf() unica dato che non cambia.
    Per quanto riguarda la funzione di stampa della riga e quindi l'uso di temp credo di avertela spiegata bene nel mio precedente post.
    Una nota: uso strncpy() per non copiare il terminatore di stringa (\0) e quindi terminare temp prima dell'ora...
  • Re: Linguaggio C, scrivere sul file con tab

    Ok, ti ringrazio
Devi accedere o registrarti per scrivere nel forum
4 risposte