Scrittura formattata
Transcript
Scrittura formattata
Esercizi su Input/Output con formato LLCaponetti Caponetti FormattedIO 1 Scrittura formattata - printf Funzione printf int printf ( <stringa di controllo>, <variabili>) La funzione restituisce un valore intero uguale ai caratteri effettivamente stampati Oppure un valore negativo in caso di errore LLCaponetti Caponetti FormattedIO 2 1 Scrittura formattata - printf Formattazione La stringa di controllo descrive il formato di output- contiene delle specifiche di conversione: dimensioni del campo, precisione, .. • Ogni specifica inizia con il simbolo di percentuale (%), e termina con l'indicatore di conversione LLCaponetti Caponetti FormattedIO 3 Stampa di interi Conversion Specifier Description d i Visualizza un intero decimale con segno Visualizza un intero decimale con segno. (Gli indicatori i e d si comportano differentemente con la scanf.) Visualizza un intero ottale senza segno Visualizza un intero decimale senza segno Visualizza un intero esadecimale senza segno. X per visualizzare le cifre 0-9 e le lettere A-F x per visualizzare le cifre 0-9 e le lettere a-f Modificatori di lunghezza. Indicano che il numero da visualizzare è rispettivamente short oppure long o u x or X h or l (letter l) LLCaponetti Caponetti FormattedIO 4 2 3 #include <stdio.h> stdio.h> 4 5 int main() 6 { 7 printf( printf( "%d "%d\n", 455 ); 8 printf( printf( "%i "%i\n", 455 ); 9 printf( printf( "%d "%d\n", +455 ); 10 printf( printf( "%d "%d\n", -455 ); 11 printf( printf( "%hd "%hd\ hd\n", 32000 ); 12 printf( printf( "%ld\ "%ld\n", n", 2000000000 ); 13 printf( printf( "%o "%o\n", 455 ); 14 printf( printf( "%u "%u\n", 455 ); 15 printf( printf( "%u "%u\n", -455 ); 16 printf( printf( "%x "%x\n", 455 ); 17 printf( printf( "%X\ "%X\n", n", 455 ); /* i same as d in printf */ 20 21 } /* end main */ LLCaponetti Caponetti FormattedIO 5 Program Ouptut 455 455 455 -455 32000 2000000000 707 455 4294966841 1c7 1C7 LLCaponetti Caponetti FormattedIO 6 3 Stampa di numeri Floating-Point Conversion specifier Description e or E Visualizza un valore floating-point value in notazione esponenziale Visualizza un valore floating-point nella notazione con virgola Visualizza un valore floating-point nella forma f o esponenziale in base alla grandezza del numero Modificatore di lunghezza. Specifica che il numero da visualozzare è un valore long double floating-point f g or G L LLCaponetti Caponetti 2 FormattedIO 7 /* Printing floatingfloating-point numbers with floatingfloating-point conversion specifiers */ 3 4 5 #include <stdio.h> 6 7 int main() 8 { 9 printf( "%e\ "%e\n", n", 1234567.89 ); 10 printf( "%e\ "%e\n", n", +1234567.89 ); 11 printf( "%e\ "%e\n", n", -1234567.89 ); 12 printf( "%E\ "%E\n", n", 1234567.89 ); 13 printf( "%f\ "%f\n", n", 1234567.89 ); 14 printf( "%g\ "%g\n", n", 1234567.89 ); 15 printf( "%G\ "%G\n", n", 1234567.89 ); 16 17 return 0; /* indicates successful termination */ 18 19 } /* end main */ 1.234568e+006 1.234568e+006 -1.234568e+006 1.234568E+006 1234567.890000 1.23457e+006 1.23457E+006 LLCaponetti Caponetti Program Output FormattedIO 8 4 Lettura formattata - scanf Funzione scanf int scanf ( <stringa di controllo>, <indirizzo delle variabili>) La funzione restituisce un valore intero uguale ai campi effettivamente letti Oppure un valore negativo in caso di errore (oppure la costante EOF) LLCaponetti Caponetti FormattedIO 9 Lettura formattata - scanf scanf Consente • Di leggere tutti i tipi di dati • Saltare specifici caratteri Stringa di controllo • Descrive il formato di input Indirizzo delle variabili • Puntatore alle variabili dove memorizzare l’ input Può includere dimensioni di campo per leggere uno specifico numero di caratteri dallo stream LLCaponetti Caponetti FormattedIO 10 5 Esercizio 1 Risolvere il seguente problema: si vuole creare una rubrica telefonica costituita da componenti aventi ciascuna i seguenti campi cognome, nome, numero di telefono In particolare si vogliono leggere i diversi record dal file standard di input –stdin- e memorizzare in un file di testo di nome elenco LLCaponetti Caponetti FormattedIO 11 Struttura dati Ogni utente può essere rappresentato mediante una struttura avente 3 campi: cognome, nome, numero-telefono L’insieme degli utenti può essere memorizzato su un file costituito da una sequenza di strutture. Scegliamo di scrivere e leggere il file in modo formattato Dichiarazioni globali typedef char STRING[20]; typedef struct { STRING cognome; STRING nome; int num; } UTENTE; LLCaponetti Caponetti FormattedIO 12 6 Main int main() { FILE *out; /* dichiarazione puntatore a FILE */ UTENTE rec; /*dichiarazione della struttura */ /* apri file out in scrittura */ if ( (out = fopen ( "elenco.txt", "w" )) ==NULL) { printf ( "errore nell'apertura del file\n") ; exit (1);} LLCaponetti Caponetti FormattedIO 13 Main /* crea file */ int risposta = 1; while (risposta ) { /* legge un elmento dal file stdin */ printf ("inserisci cognome\n"); scanf ("%s", &rec.cognome); printf ("inserisci nome\n"); scanf ("%s", &rec.nome); printf ("inserisci numero di telefono\n"); scanf ("%d", &rec.num); /* scrive i campi di rec nel file out in modo formattato*//* tra il formato di 2 campi adiacenti vi deve essere almeno uno spazio */ fprintf (out, "%s %s %d\n", rec.cognome, rec.nome, rec.num); printf ("vuoi continuare? (1 oppure 0) \n"); scanf("%d", &risposta); Nel formato di scrittura i dati sono separati da un blank printf ("\n"); } LLCaponetti Caponetti FormattedIO 14 7 Main /* chiude il file out */ fclose (out); /* apre file out in lettura */ if ((out = fopen ("elenco.txt", "r")) ==NULL) { printf ("errore nell'apertura del file\n") ; exit (1);} LLCaponetti Caponetti FormattedIO 15 Main /* visualizza il file out */ while (!feof(out) ) { /* leggi i campi dal file out con il formato*/ fscanf (out, "%s%s%d\n", &rec.cognome, &rec.nome, &rec.num); Il formato di lettura è uguale a quello con cui i dati sono stati scritti con fprintf – escluso i blank /* visualizza rec */ printf ("%20s%20s%10d", rec.cognome, rec.nome, rec.num); printf ("\n"); } LLCaponetti Caponetti FormattedIO 16 8 Modifiche Modificare il programma introducendo 2 procedure: Creafile --- per memorizzare il file void creafile (FILE *out) Visualizzafile ---- per visualizzare il file void visualizzafile (FILE *out); LLCaponetti Caponetti FormattedIO 17 Memorizzazione sul file – procedura creafile void creafile (FILE *out) { UTENTE st; int risposta = 1; COMPLETARE while (risposta ) { “ leggi dal file stdin i campi cognome, nome, num della struttura st scrivi sul file out i campi letti in modo formattato */ scanf("%d", &risposta); printf ("\n"); LLCaponetti Caponetti } } FormattedIO 18 9 Visualizzazione del file – procedura visualizzafile void visualizzafile (FILE *out) { UTENTE st; while (!feof(out) ) COMPLETARE “ leggi dal file out i campi cognome, nome, num con lo stesso formato usato per scriverli { visualizza sul file stdout i campi letti */ } LLCaponetti Caponetti FormattedIO 19 Formato per la visualizzazione /* visualizza un elemento su file stdout */ printf ("%20s%20s%10d", st.cognome, st.nome, st.num); Nell’esempio il formato di stampa è costituito da 3 campi: - 20 caratteri per la prima stringa 20 caratteri per la stringa successiva -- 10 caratteri per un intero LLCaponetti Caponetti FormattedIO 20 10 Esercizio 2 Risolvere il seguente problema: si vuole visualizzare l’elenco degli studenti caratterizzati dal nome, cognome e matricola ordinato secondo il campo matricola. a. Descrivere la struttura dati scelta per memorizzare i dati b. Descrivere l’algoritmo di ordinamento mediante diagramma di c. d. flusso o pseudocodifica Descrivere l’algoritmo con cui memorizzare i dati su un file Scrivere il programma che risolva il problema, organizzato in funzioni o procedure per Leggere i dati e memorizzarli su un file Caricare i dati in un vettore Ordinare il vettore secondo il campo matricola Visualizzare i dati ordinati LLCaponetti Caponetti FormattedIO 21 11
Documenti analoghi
Le funzioni di input/output - Università degli Studi di Parma
per visualizzare dati sullo standard output
I/O Avanzato e File Formattazione avanzata Formattazione - e-Lite
Formattazione dell’output
L’output (su schermo o su file) viene formattato
solitamente mediante la funzione printf (o
fprintf)
Ogni dato viene stampato attraverso un
opportuno specificatore di form...