Scrittura formattata - printf

Похожие документы
Gestione dei file in C

Formattazione avanzata. Modificatori di formato in output Modificatori di formato in input Stream predefiniti

LIBRERIE STANDARD in C

LIBRERIE STANDARD in C. LIBRERIE STANDARD in C

File e puntatori a file

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Formattazione avanzata. I/O Avanzato e File. Formattazione dell output. Formattazione avanzata. Forma completa degli specificatori

Input/Output di numeri

Gestione dei file. File di testo e binari

Variabili e Istruzioni

La formattazione dell input/output in C

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

File binari e file di testo

I files in C. A cura del prof. Ghezzi

Introduzione alla programmazione in linguaggio C

Esercizio 1 (15 punti)

Le funzioni, e le istruzioni di input/output

Esercizio 1 (15 punti)

Input/output in C e in C++

Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132

Esercizio 1 File: ordinamento di un archivio di studenti (file binario)

Esercizi. Filtraggio

GESTIONE DEI FILE IN C

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Esercitazione 11. Liste semplici

IL PRIMO PROGRAMMA IN C

Esercitazione 6. Array

Linguaggio C: i file

Транскрипт:

Esercizi su Input/Output con formato 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 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 FormattedIO 3 Stampa di interi Conversion Specifier d i o u x or X h or l (letter l) Description 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 FormattedIO 4 2

3 #include <stdio.h stdio.h> 4 5 int main() 6 { 7 printf( "%d\n", 455 ); 8 printf( "%i\n", 455 ); /* i same as d in printf */ 9 printf( "%d\n", +455 ); 10 printf( "%d\n", -455 ); 11 printf( "%hd hd\n", 32000 ); 12 printf( "%ld\n" n", 2000000000 ); 13 printf( "%o\n", 455 ); 14 printf( "%u\n", 455 ); 15 printf( "%u\n", -455 ); 16 printf( "%x\n", 455 ); 17 printf( "%X\n" n", 455 ); 20 21 } /* end main */ FormattedIO 5 Program Ouptut 455 455 455-455 32000 2000000000 707 455 4294966841 1c7 1C7 FormattedIO 6 3

Stampa di numeri Floating-Point Conversion specifier e or E f g or G L Description 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 FormattedIO 7 2 /* Printing floating-point numbers with 3 floating-point conversion specifiers */ 4 5 #include <stdio.h> 6 7 int main() 8 { 9 printf( "%e\n" n", 1234567.89 ); 10 printf( "%e\n" n", +1234567.89 ); 11 printf( "%e\n" n", -1234567.89 ); 12 printf( "%E\n" n", 1234567.89 ); 13 printf( "%f\n" n", 1234567.89 ); 14 printf( "%g\n" n", 1234567.89 ); 15 printf( "%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 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) 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 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 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; 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);} 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); printf ("\n"); } Nel formato di scrittura i dati sono separati da un blank FormattedIO 14 7

/* chiude il file out */ fclose (out); Main /* apre file out in lettura */ if ((out = fopen ("elenco.txt", "r")) ==NULL) { printf ("errore nell'apertura del file\n") ; exit (1);} 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"); } 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); FormattedIO 17 Memorizzazione sul file procedura creafile void creafile (FILE *out) { UTENTE st; int risposta = 1; 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"); } } COMPLETARE FormattedIO 18 9

Visualizzazione del file procedura visualizzafile void visualizzafile (FILE *out) { UTENTE st; while (!feof(out) ) { leggi dal file out i campi COMPLETARE cognome, nome, num con lo stesso formato usato per scriverli visualizza sul file stdout i campi letti */ } 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 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 flusso o pseudocodifica c. Descrivere l algoritmo con cui memorizzare i dati su un file d. 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 FormattedIO 21 11