Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
Introduzione al linguaggio C
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Stringhe di caratteri In linguaggio C.
INFORMATICA I file.
Programmazione Procedurale in Linguaggio C++
Programmazione Procedurale in Linguaggio C++
Caratteri e stringhe di caratteri
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 2 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
File.
Laboratorio di Linguaggi lezione IV: tipi definiti dallutente Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi lezione VI: puntatori 2/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi P R I M O C O M P I T I N O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione IX: Dentro le Librerie Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione III: tipi base, espressioni, type-cast Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e.
Laboratorio di Linguaggi lezione V: puntatori (1/3) Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione III Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Laboratorio di Linguaggi lezione IX: tipi ricorsivi Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08.
Laboratorio di Linguaggi lezione II Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Introduzione agli stream e alle classi
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
File di testo, file binari
Dichiarazioni e tipi predefiniti nel linguaggio C
I File.
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
Tipi di dati elementari
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e stringhe Marco D. Santambrogio – Ver. aggiornata al 9 Agosto 2013.
Esercizi su File.
Esercizi su File e Liste
1Piero Scotto - C14. Finalità del corso Programma Materiale Requisiti Spendibilità 2Piero Scotto - C14.
Gestione dei file di testo, matrici e struct
2000 Prentice Hall, Inc. All rights reserved. Capitolo 11 (Deitel) Lelaborazione dei file Sommario Introduzione La gerarchia dei dati 11.3.
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
Programmazione in linguaggio C
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Laboratorio di Linguaggi... altre D O M A N D E ! Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione XI Marco Tarini Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Transcript della presentazione:

Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2007/08

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input / Output

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Printf Scrittura formattata int printf( const char* formato [, lista parametri...] )

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input / Output Scrittura formattata int x=10;... printf("Il valore di x e' %d \n", x); Scrive sullo schermo: Il valore di x e' 10 carattere '\n' : End Of Line (accapo) %d è un format tag : significa, scrivi il valore di un parametro intero

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input / Output Scrittura formattata int x=10, y=0;... printf("Posizione [%d,%d] ! ", x, y); Scrive sullo schermo: Posizione [10,0] !

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Vi ricordate che 'a' e 121 sono entrambi costanti (literals) di tipo char ? Usando il format tag appropriato, posso far scrivere uno o l'altro: char ch='a';... printf("Posso scrivere %c o %d a piacare ! ", ch, ch); Scrive sullo schermo: Posso scrivere a o 96 a piacere !

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Il format tag definisce –come interpretare –con che formato scrivere il parametro corrispondente un array di caratteri terminato da '\0' %i%d %u%x%X %c %f%e%E %p format tag: interpreta il parametro come: un intero con segno un intero senza segno un numero in virgola mobile un carattere una stringa un puntatore %s %o

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a %i%d %u%x%X %c %f%e%E %p format tag: interpreta il parametro come: un intero con segno un intero senza segno un numero in virgola mobile un carattere una stringa un puntatore %s %o Format Tags Il format tag definisce –come interpretare –con che formato scrivere il parametro corrispondente in decimale in esadecimale (es. 12ac3a ) in esadecimale (es. 12AC3A ) in base otto (es )

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a %i%d %#u%#u%#x%#X %c %f%e%E %p format tag: interpreta il parametro come: un intero con segno un intero senza segno un numero in virgola mobile un carattere una stringa un puntatore %s %#o Format Tags Il format tag definisce –come interpretare –con che formato scrivere il parametro corrispondente in decimale in esadecimale (es. 0x12ac3a ) in esadecimale (es. 0X12AC3A ) in base otto (es )

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a %i%d %c %f%e%E %p format tag: interpreta il parametro come: un intero con segno un numero in virgola mobile un carattere una stringa un puntatore %s Format Tags Il format tag definisce –come interpretare –con che formato scrivere il parametro corrispondente in notazione comune (es. 1.2E12 ) in notazione esponenziale (es. 1.2e12 )

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Esempio printf("Scrivo %d %d e %d !\n\nah!\n", 1, 2, 3); Risultato: Scrivo 1 2 e 3 ah!

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Risultato: Scrivo 1 2 e 3 ah! Format Tags Esempio printf("Scrivo %5d %5d e %5d !\n\nah!\n", 1, 2, 3); "5 caratteri di lunghezza"

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Risultato: Scrivo: e anche +1e+000 Format Tags etc... printf("Scrivo: %+6.3lf e anche %+.0e\n", 1.1, 1.2 ); 6 cifre in tutto 3 cifre dopo virgola l : è un "float lungo", cioè un double + : specifica il segno anche se pos

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Risultato: Totale (in euro): 130 Format Tags etc... char* stringa= "Totale (in euro): "; int res;... printf("%s%d\n", stringa, res );

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Avvertenza: attenzione ai tipi printf("Torna %f euro\n", 150 ); Sullo schermo: Torna 0 euro Errore! Ha interpretato un valore intero come un float! Se i due tipi hanno dimensione diversa, può anche causare un crash (errore di accesso in lettura).

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Avvertenza: attenzione ai tipi printf("Torna %f euro\n", 150 ); Sullo schermo: Torna 0 euro

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Format Tags Avvertenza: attenzione ai tipi int x=150; printf("Torna %f euro\n", x ); Sullo schermo: Torna 0 euro

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Funzionamento di printf Come si scrive un programma che ci dice quale e' il codice ascii del simbolo '!' ? E se lo vogliamo in esadecimale?

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Funzionamento di printf Come si scrive un programma che risolve il quiz del banner misterioso? char msg[]= {78,111,119,32,72,105,110,103,0}; testo del quiz

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Dove scrive printf? sull' output standard di solito, significa sul monitor ma, ad esempio... –al momento di eseguire il programma posso utilizzare il la sintassi: programma > file

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Scrivere non solo sullo schermo int printf( const char* format [, lista param.] ) printf : scrive sull'output standard int fprintf( const char* format [, lista param.] ) fprintf : scrive su un File int sprintf( const char* format [, lista param.] ) sprintf : scrive su un'altra Stringa (che deve essere già allocata) FILE* stream, char* output,

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Esempio con sprintf concatenazione di stringhe char[] stringa1 = "cacio"; char[] stringa2 = "cavallo"; char *concat; sprintf(concat,"%s%s",stringa1, stringa2); NON vi eravate accorti dell'errore?!

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Esempio con fprintf scrittura in un file float x,y,z; FILE* file_di_output= fopen ("ciao.txt", "wt"); fprintf( file_di_output,"(%f %f %f)",x,y,z ); fclose(file_di_output); FILE* : il puntatore a una struttura che contiene tutto quello che c'è da sapere su un file aperto. Cosa contiene questa struttura? Non importa! (è platform dependent) Gestiamo i file utilizzando solo puntatori a questa struttura... fopen : apri un file. resitutisce un FILE* (alloca la struttura & apre il file) Primo parametro: nome del file Secondo parametro: stringa con 1- r ead o w rite o a ppend, 2- modo t esto o b inario Restituisce NULL se non è riusicto ad aprire il file fclose : chiudi un file. (chiude il file & disalloca la struttura) solo un certo numero di files può essere aperto in un dato momento consente ad altre applicazioni di usare il file

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input / Output

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a scanf da printf a scanf –per leggere dalla tastiera invece che scrivere sul monitor int x;... printf("%d", x); scanf & ora vuole un puntatori! (perche?) deve essere un puntatore a qualcosa di allocato (in questo esempio, è allocato automaticamente) e' ancora + importante che il tipo del puntatore corrisponda al format tag! (errori in scrittura invece che lettura, fa più male)

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a scanf Tutto il resto come printf Restituisce il numero di target tag che è stato corettamente assegnato int x,y, n; unsigned int z;... n = scanf("%d-%d:%X", &x, &y, &z); n sarà uguale a 3 se l'utente avrà digitato, ad esempio: 5-5:A0A111 n sarà uguale a 2 se l'utente avrà digitato, ad esempio: 5-5pippo n sarà uguale a 0 se l'utente avrà digitato, ad esempio: >:-P

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a scanf Tutto il resto come printf Restituisce il numero di target tag che è stato corettamente assegnato int g,m,a; do { printf("inserisci giorno/mese/anno:" ); } while ( scanf("%u/%u/%u", &g, &m, &a)!=3 );

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Leggere non solo dalla tastiera int scanf( const char* format [, lista punt.] ) scanf : legge dall'input standard int fscanf( const char* format [, lista punt.] ) fscanf : legge da un File int sscanf( const char* format [, lista punt.] ) sscanf : legge da una Stringa FILE* stream, char* input,

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Esempio di fscanf FILE* file_di_output= fopen ("ciao.txt", "wt"); fprintf( file_di_output,"(%f %f %f)",x,y,z ); fclose(file_di_output); FILE* file_di_input= fopen ("ciao.txt", "rt"); fscanf( file_di_input,"(%f %f %f)",&x,&y,&z ); fclose(file_di_input); float x,y,z;

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input Output printf sprintf fprintf scanf sscanf fscanf da/a terminale da/a stringhe da/a files inputoutput

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Uso tipico di sscanf : Lettura degli argomenti da riga di comando di un programma. int main(int argc, char *argv[]) argv[0] : nome del programma argv[1] : primo argomento... argv[argc-1] : ultimo argomento numero di argomenti + 1 C:> pippo.exe –a –o:zap argv[0] argv[1] argv[2]

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Per provare il programma su Dev-C++ Impostare gli argomenti su Dev-C++ 21|

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Uso tipico di sscanf (compito per casa) : /* mostra le isturzioni di uso da riga di comando */ void show_usage(){... } int main(int argc, char *argv[]) { int x; if (argc<2) { /* nessun argomento: mostra l'aiuto e esci */ show_usage(); return 0; } if (sprintf("%d", argv[1], &x) != 1) { /* il primo argomento non e' un numero: mostra l'aiuto e esci */ show_usage(); return 0; } /* mostra i byte che compongono il numero... in base 16. Due cifre a byte, separate da uno spazio es: */... return 1; }

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Input Output printf sprintf fprintf scanf sscanf fscanf da/a terminale da/a stringhe da/a files inputoutput

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Gestione files FILE* file_di_output= fopen ("ciao.txt", "wt");... /* uso il file in scrittura */ fclose(file_di_output); FILE* file_di_output= fopen ("ciao.txt", "rt");... /* uso il file in lettura */ fclose(file_di_output);

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Files in binario o in modo testo? Binario: –veloce –platform dependent incubi di compatibilità se si leggono files scritti con una architettura differente –di solito più coinciso Modo testo: –più lento –platform independent –file comprensibili (leggibili in "umano" come testo)

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Gestione files Scrittura e lettura non formattate fwrite fread o ( void* p, int size_elem, int n_elem, FILE* f) scrivono/leggono (in binario) sul file restituiscono il numero di elementi scritti/letti sono operatori efficienti

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Gestione files tutte le funzioni per leggere e scrivere su files... leggono e scrivono dalla posizione corrente –che viene aggiornata come effetto collaterale fwrite fread fprintf fscanf

M a r c o T a r i n i - L a b o r a t o r i o d i L i n g u a g g i / U n i v e r s i t à d e l l I n s u b r i a Gestione files la posizione corrente: –e' un long int –puo' essere letta –puo' essere cambiata: –o anche, riportata all'inizio del file: long int ftell(FILE *fp); int fseek(FILE *fp, long int offset, SEEK_SET ); int fseek(FILE *fp, long int offset, SEEK_CUR ); int fseek(FILE *fp, long int offset, SEEK_END ); int rewind (FILE *fp );