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