1 / 12

Laboratorio di Linguaggi lezione VII

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.

yepa
Download Presentation

Laboratorio di Linguaggi lezione VII

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

More Related