lucidi a colori - diegm - Università degli Studi di Udine
Transcript
lucidi a colori - diegm - Università degli Studi di Udine
Fondamenti di Informatica - Input/output in C e in C++ FONDAMENTI DI INFORMATICA Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI Facoltà di Ingegneria Università degli Studi di Udine Input/output in C e in C++ © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 1 Fondamenti di Informatica - Input/output in C e in C++ Nota di Copyright Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà degli autori prof. Pier Luca Montessoro e ing. Davide Pierattoni, Università degli Studi di Udine. Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione. Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori. L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione). In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Fondamenti di Informatica - Input/output in C e in C++ Input/output standard • In C, l’header file necessario per effettuare l’input da tastiera e l’output sul monitor è stdio.h: #include <stdio.h> • In C++ le stesse operazioni richiedono l’header file iostream.h: #include <iostream.h> © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 3 Fondamenti di Informatica - Input/output in C e in C++ Lettura di dati da tastiera • Per leggere da tastiera un intero i, un numero reale z oppure una stringa str, il C offre la funzione scanf (di input formattato): scanf ("%d %f %s", &i, &z, str); • Il C++ permette simili operazioni in modo più semplice, interpretando automaticamente il tipo del dato a partire da quello della variabile in cui il dato viene scritto: cin >> i >> z >> str; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 4 Fondamenti di Informatica - Input/output in C e in C++ Stampa sul monitor • Per stampare sul monitor (standard output) un intero i, un numero reale z oppure una stringa str, in C si usa la funzione printf (di output formattato): printf ("%d %f %s", i, z, str); • In C++ si utilizza la funzione cout, che interpreta automaticamente il tipo del dato a partire da quello della variabile da stampare: cout << i << z << str; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 5 Fondamenti di Informatica - Input/output in C e in C++ Lettura di caratteri • La lettura di un carattere singolo, spazi inclusi, si effettua in C con la funzione getchar(): char ch; ch = getchar(); Il corrispondente in C++ è la funzione cin.get(): ch = cin.get(); © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 6 Fondamenti di Informatica - Input/output in C e in C++ Scrittura con formattazione • La stampa sul monitor di un intero i in ottale o in esadecimale avviene in C con opportuni caratteri di conversione applicati alla funzione printf(): printf ("%o %h", i, i); • La stessa formattazione si ottiene in C++ con la sequenza: cout << oct << i << hex << i; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 7 Fondamenti di Informatica - Input/output in C e in C++ Scrittura di numeri reali • In C la stampa di un numero reale z può essere effettuata specificando negli argomenti di printf() il numero di caratteri totali e il numero di cifre decimali desiderati: printf ("%10.4f", z); /* stampa z su 10 caratteri con 4 cifre decimali */ • In C++ simili formattazioni, con risultato generalmente diverso, si ottengono ad esempio con: cout << cout.precision(4) << z; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 8 Fondamenti di Informatica - Input/output in C e in C++ Input e output sui file • In C, l’header file necessario per effettuare l’input e l’output sui file è stdio.h: #include <stdio.h> • In C++ le stesse operazioni richiedono in aggiunta a iostream.h l’header file specifico fstream.h: #include <iostream.h> #include <fstream.h> © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 9 Fondamenti di Informatica - Input/output in C e in C++ File handler • La dichiarazione di un file handler (puntatore ad una struttura FILE) in un programma C è: FILE *f_input, *f_output; /*due handler, uno per il file di input e l’altro per il file di output */ • In C++ gli handler di file su disco si dichiarano invece come: fstream f_input, f_output; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 10 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in lettura • Per aprire il file dati_in.txt in lettura e gestire la condizione di errore in mancanza del file stesso, il C prevede l’uso della funzione fopen: if ((f_input = fopen("dati_in.txt", "r")) == NULL) { /* istruzioni da eseguire in caso di errore (es. nel caso di file inesistente) */ } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 11 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in lettura • Per aprire lo stesso file dati_in.txt in lettura, una delle possibili sequenze di istruzioni corrispondenti in C++ è la seguente: f_input.open ("dati_in.txt", ios::in); if (f_input.fail()) { // istruzioni da eseguire in caso di // errore } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 12 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in scrittura • Per aprire il file dati_out.txt in scrittura, cancellando un’eventuale versione preesistente del file su disco, il C prevede istruzioni del tipo: if ((f_output = fopen("dati_out.txt", "w")) == NULL) { /* istruzioni da eseguire in caso di errore*/ } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 13 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in scrittura • In C++ lo stesso risultato si ha con istruzioni del tipo: f_output.open ("dati_out.txt", ios::out); if (f_output.fail()) { // istruzioni da eseguire in caso di // errore } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 14 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in scrittura • Per aprire il file dati_out.txt in scrittura, iniziando però dalla fine del file se esso è già presente su disco (append) , il C utilizza ancora la funzione fopen(): if ((f_output = fopen("dati_out.txt", "a")) == NULL) { /* istruzioni da eseguire in caso di errore*/ } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 15 Fondamenti di Informatica - Input/output in C e in C++ Apertura dei file in scrittura • In C++ la scrittura in modalità append si ha con istruzioni del tipo: f_output.open ("dati_out.txt", ios::app); if (f_output.fail()) { // istruzioni da eseguire in caso di // errore } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 16 Fondamenti di Informatica - Input/output in C e in C++ Lettura di caratteri da file • Per leggere dei caratteri (spazi inclusi) da un file dati_in.txt, il C impiega la funzione fgetc(), che restituisce il valore EOF (-1) quando si raggiunge la fine del file: char ch; FILE *f_input; if ((f_input = fopen("dati_in.txt", "r")) != NULL) while ((ch = fgetc(f_input)) != EOF) { ... © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 17 Fondamenti di Informatica - Input/output in C e in C++ Lettura di caratteri da file • Il C++ utilizza invece la funzione get()della classe fstream, che restituisce il valore zero quando si raggiunge la fine del file: char ch; fstream f_input; f_input.open("dati_in.txt", ios::in); if (f_input.fail()) { ... } while ((ch = f_input.get()) != 0) { ... © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 18 Fondamenti di Informatica - Input/output in C e in C++ Lettura da file con fomattazione • Per leggere da un file dati_in.txt un intero i, un reale z e una stringa str, in C si utilizza la funzione fscanf(), che consente di specificare il tipo del dato letto e salvarne il valore in un’opportuna variabile: while (fscanf (f_input, "%d %f %s", &i, &z, str) != EOF) { ... } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 19 Fondamenti di Informatica - Input/output in C e in C++ Lettura da file con fomattazione • Un risultato equivalente si ha in C++ con costrutti del tipo: if (f_input >> i >> z >> str) { // se l’espressione restituisce il // valore zero, allora il file // è finito... } © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 20 Fondamenti di Informatica - Input/output in C e in C++ Scrittura su file con formattazione • Per scrivere su un file dati_out.txt un intero i, un reale z e una stringa str, in C si usa la funzione fprintf(), specificando negli argomenti il tipo delle variabili il cui valore verrà scritto nel file: fprintf (f_output, "%d %f %s", i, z, str); • In C++ lo stesso risultato si ottiene con la sintassi: f_output << i << z << str; © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 21 Fondamenti di Informatica - Input/output in C e in C++ Chiusura di un file • Per chiudere un file precedentemente aperto da un programma C con fopen(), si deve usare la funzione fclose(): f_input = fopen("dati_in.txt", "r"); f_output = fopen("dati_out.txt", "w"); ... fclose(f_input); fclose(f_output); © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 22 Fondamenti di Informatica - Input/output in C e in C++ Chiusura di un file • In C++ le istruzioni corrispondenti sono: f_input.open("dati_in.txt", ios::in); f_output.open("dati_out.txt", ios::out); ... f_input.close(); f_output.close(); © 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 23