120 likes | 250 Views
Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05. Laboratorio di Linguaggi lezione VII. Marco Tarini. Input Output. output. input. da/a terminale. printf. scanf. da/a stringhe. sprintf. sscanf.
E N D
Università dell’Insubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Laboratorio di Linguaggilezione VII Marco Tarini
Input Output output input da/a terminale printf scanf da/a stringhe sprintf sscanf da/a files 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 ‧ 2 0 0 4 / 0 5 ‧ 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 *concaten; sprintf(concaten,"%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 ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Input Output output input da/a terminale printf scanf da/a stringhe sprintf sscanf da/a files 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 ‧ 2 0 0 4 / 0 5 ‧ 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 : argv[1] argv[0] argv[2] • Lettura degli argomenti da riga di comando di un programma. argv[0] : nome del programma argv[1] : primo argomento ... argv[argc-1] : ultimo argomento numero di argomenti + 1 int main(int argc, char *argv[]) C:> pippo.exe –a –o:zap 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 ‧ 2 0 0 4 / 0 5 ‧ 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: 00 00 00 01 */ ... 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 ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a
Input Output output input da/a terminale printf scanf da/a stringhe sprintf sscanf da/a files 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 ‧ 2 0 0 4 / 0 5 ‧ 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 ‧ 2 0 0 4 / 0 5 ‧ 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 ‧ 2 0 0 4 / 0 5 ‧ 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 ( void* p, int size_elem, int n_elem, FILE* f) o fread • 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 ‧ 2 0 0 4 / 0 5 ‧ 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 fprintf fread 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 ‧ 2 0 0 4 / 0 5 ‧ 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 ); 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 ‧ 2 0 0 4 / 0 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a