Laboratorio di Informatica I 1
Transcript
Laboratorio di Informatica I 1
Laboratorio di Informatica I Vi.ttorio Scarano Struttura della lezione Laboratorio di Informatica 2000-2001 Lezione 22: Input/Output e Files Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università di Salerno • Esami: date e modalità • Funzioni di libreria standard – printf – scanf • Gestione di file 2 Struttura dei parametri di printf Vi.ttorio Scarano • Modulo A+B (recupero): – (scritto) 21 marzo, aula P1, ore 13. • Modulo C: Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Esami: date e modalità – (scritto) 6 aprile, aula P1, ore 15 • Note per entrambi gli esami: – – – – necessaria la prenotazione il preappello consiste nelle due prove scritte Modulo C accessibile solo se si supera A+B Se non si supera il modulo C, esami da giugno su tutto il programma del corso. • contiene i parametri di formattazione che permettono il trattamento e la formattazione dei parametri (opzionali) che seguono – argomenti • espressioni che vengono valutate e il cui valore è stampato a video printf (“Risultato %d\n”, i); 4 Comportamento Esempio carattere intero intero decimale senza segno ottale senza segno esadecimale senza segno floating point floating point più breve formato tra e ed f più breve formato tra E ed f stringa puntatore (hex) carattere % A Vi.ttorio Scarano Controllo della formattazione 120 12 56 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Laboratorio di Informatica 2000-2001 – stringa di controllo 3 Caratteri di conversione printf Caratteri di formattazione c d u o x,X e,E f g G s p % • La funzione printf: 0xA06 7.12e+00 7.12 Ciao! 0xA06 5 • Caratteri di controllo della formattazione: – presenti tra il simbolo % ed il carattere di conversione specifico %-7.5f allineamento ampiezza precisione %07d precedi con zeri ampiezza 6 1 Laboratorio di Informatica I Struttura dei parametri di scanf Vi.ttorio Scarano • Si può specificare la ampiezza e la precisione di un campo tramite variabili: Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Campi ad ampiezza e precisione variabili float f=14.212134321134; int a, p; ..... /*scelgo a e p */ printf ("f = %*.*f \n", a, p, f); • La funzione scanf: – stringa di controllo • contiene i parametri di formattazione che permettono il trattamento dei dati inseriti da tastiera e la memorizzazione nelle variabili che seguono – argomenti • variabili passate per riferimento – restituisce il numero di parametri assegnati scanf (“%d”, &i); 7 Comportamento carattere intero intero decimale ottale esadecimale floating point stringa puntatore (hex) Vi.ttorio Scarano Caratteri di formattazione c d,i u o x,X e,E,f,g,G s p Il funzionamento della stringa di controllo Tipo della variabile char intero unsigned unsigned unsigned float stringa void * Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Caratteri di conversione scanf 8 • La stringa di controllo determina come deve essere interpretato il flusso di dati in input: – i caratteri non di conversione devono corrispondere a quelli presenti sul flusso di dati int a, b; char c; printf (”Inserire (int,char,int):"); scanf ("%d%c%d", &a, &c, &b); printf ("a=%d, c=%c, b=%d\n", a, c, b); printf (“Inserire (int,F,char,int):"); scanf ("%dF%c%d", &a, &c, &b); printf ("a=%d, c=%c, b=%d\n", a, c, b); 9 Input di range di valori int a, b; char c; printf (”Inserire (int,char,int):"); scanf ("%d%c%d", &a, &c, &b); printf ("a=%d, c=%c, b=%d\n", a, c, b); printf (“Inserire (int,F,char,int):"); scanf ("%dF%c%d", &a, &c, &b); printf ("a=%d, c=%c, b=%d\n", a, c, b); Vi.ttorio Scarano • I caratteri presenti nella stringa di formattazione vengono scartati Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Un esempio di applicazione 10 $ a.out Inserire (int,char,int): 13G43 a=13, c=G, b=43 Inserire (int,F, char,int): 13FG43 a=13, c=G, b=43 $ 11 • Stringhe composte da caratteri determinati – si possono specificare i caratteri ammessi ed i caratteri esclusi dalla stringa char s[40], t[40]; scanf (“%[abc]”, s); scanf (“%s”, t); printf (“%s, %s\n”, s, t); 12 2 Laboratorio di Informatica I Gestione dei file char s[40], t[40]; printf (“Stringa:”); scanf (“%[abc]”, s); scanf (“%s”, t); printf (“%s, %s\n”, s, t); Vi.ttorio Scarano • La parte rimanente dell’input viene preso dalla prossima scanf: Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Un esempio di applicazione del range $ a.out Stringa: aabbbccaabbcffaabbc aabbbccaabbc, ffaabbc $ • Nella libreria standard viene definito una struttura FILE che contiene le informazioni per accedere ad i file (descrittore di file) • Necessaria la interfaccia <stdio.h> • Automaticamente sono previsti i descrittori di file stdin, stdout, stderr • Ogni file viene acceduto attraverso un puntatore ad una struttura FILE FILE *f; .... 13 Istruzioni per leggere e scrivere nei file Vi.ttorio Scarano • Apertura e chiusura di file: Laboratorio di Informatica 2000-2001 – fd = fopen (nomefile, modalità) – fclose (fd) FILE *f; ... f = fopen (“pippo”, “r”); ....... /* operazioni */ fclose (f); • Stringa per la modalità di accesso: “r” “w” “a” “r+” lettura scrittura append (aggiunta in coda) lettura e scrittura 15 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Un esempio: stampa a video di un file #include <stdio.h> main (int argc, char *argv[]) { FILE *fp; int cont=0; char c; if (argc !=2) { printf (”Errore\n"); return; } printf ("Apro %s..", argv[1]); if (! (fp = fopen (argv[1], "r"))){ printf ("Non posso aprire %s\n", argv[1]); return; } printf ("inizio file\n"); while ((c = getc(fp))!=EOF) { putc (c, stdout); cont++; } printf ("\nDimensione file = %d\n", cont); fclose (fp); } FILE *f; ... f = fopen (“pippo”, “w”); fprintf (f, “%d”, i); fclose (f); • c = getc(fd) – macro che legge un carattere da fd e restituisce una costante EOF se il file è terminato • putc (c, fd) 16 Un altro esempio: copia in maiuscolo (1) • • • • Input da linea di comando Dichiarazione di fp e cont Controllo dell’input Apertura del file con controllo del successo • Ciclo per input – legge un carattere alla volta – stampo su output (= printf) – incremento contatore • Stampa dimensione • Chiusura • fprintf (fd, stringa, parametri...) • fscanf (fd, stringa, parametri...) – macro che scrive c su fd 17 Vi.ttorio Scarano – – – – Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Istruzioni per accedere ai file 14 #include <stdio.h> main (int argc, char *argv[]) { FILE *fpr, *fpw; int cont=0; char c; if (argc !=3) { printf (”Errore\n"); return; } printf ("Apro %s in lettura..", argv[1]); if (! (fpr = fopen (argv[1], "r"))){ printf ("Non posso aprire %s\n", argv[1]); return; } printf ("Apro %s in scrittura..", argv[2]); if (! (fpw = fopen (argv[2], "w"))){ printf ("Non posso aprire %s\n", argv[2]); return; } printf ("inizio la copia..\n"); ............ /* continua */ • • • • Input da linea di comando Dichiarazione di fpr, fpw Controllo dell’input Apertura del file da leggere con il controllo del successo • Apertura del file da scrivere con il controllo del successo 18 3 Laboratorio di Informatica I • Ciclo per input – legge un carattere alla volta – stampo su output (= printf) il carattere convertito in maiuscolo (macro toupper) – incremento contatore • Stampa dimensione • Chiusura 19 Vi.ttorio Scarano ........... /* continua */ while ((c = getc(fpr))!=EOF) { putc (toupper(c), fpw); cont++; } printf (".. fatta! Dim. file = %d\n", cont); fclose (fpr); fclose (fpw); } In conclusione • Studiate per i moduli che dovete sostenere e ... Laboratorio di Informatica 2000-2001 Laboratorio di Informatica 2000-2001 Vi.ttorio Scarano Un altro esempio: copia in maiuscolo (2) 20 4