per leggere caratteri: getchar(void); Laboratorio di linguaggi

Documenti analoghi
Gestione dei File in C

Gestione dei file. Linguaggio ANSI C Input/Output - 13

DOTT. ING. LEONARDO RIGUTINI DIPARTIMENTO INGEGNERIA DELL INFORMAZIONE UNIVERSITÀ DI SIENA VIA ROMA SIENA UFF

Gestione dei File. dischi nastri cd

Struttura dati FILE. Concetto di FILE

Input/output in C e in C++

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

Sono file di caratteri, organizzati in linee. Ogni linea e` terminata da una marca di fine linea (newline, cara ttere '\n').

Fondamenti di Informatica T. Linguaggio C: File

Puntatori a funzione. In C è possibile utilizzare dei puntatori a funzioni, ovvero

Gestione di files Motivazioni

CARATTERI E STRINGHE Caratteri e stringhe Funzioni della libreria standard I/O Funzioni della libreria di gestione delle stringhe

Fondamenti di Informatica. Tecniche di input/output per l'accesso ai file

OTTAVA ESPERIENZA DI LABORATORIO. L elaborazione dei files in C

Esercitazione 4. Comandi iterativi for, while, do-while

VBA è un linguaggio di scripting derivato da Visual Basic, da cui prende il nome. Come ogni linguaggio ha le sue regole.

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Gestione dinamica della memoria Stringhe File

4 GLI ARRAY E LE STRINGHE

Files in C++ Fondamenti di Informatica. R. Basili. a.a

UD4 - MATLAB. M-file. Efficienza degli algoritmi. Formati d uscita

puntatori Lab. Calc. AA 2007/08 1

Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura

2) FILE BINARI: è una sequenza di byte avente una corrispondenza uno a uno con la sequenza ricevuta dal dispositivo esterno.

Introduzione al Linguaggio C

MAGAZZINO.CPP January 2, 2008 Page 1

Le funzioni. Funzioni. Funzioni. Funzioni. Funzioni. Funzioni

I/O Avanzato e File. Definizione di file File di testo in C Input robusto Formattazione avanzata Esercizi proposti Sommario

Strutture dati e realizzazione in C. Componenti software:

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Quotazione compareto( ) Quotazione piurecente( ) Quotazione Quotazione Quotazione non trovato count( )

MANUALE UTENTE PROCEDURA PLANET WEB INTERPRISE (II edizione)

Linguaggio C - Funzioni

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Informatica: arte e mestiere

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

La codifica. dell informazione

Esercizi di programmazione in C

STRINGHE: ARRAY DI CARATTERI! a p e \0

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

TUTORIAL LIBRI IN SIMBOLI

Manuale utente Soggetto Promotore Erogatore Politiche Attive

File di testo e file binari Directory

EXCEL. Alfabetizzazione Informatica Prof. GIUSEPPE PATTI

3.5.1 PREPARAZ1ONE I documenti che si possono creare con la stampa unione sono: lettere, messaggi di posta elettronica, o etichette.

Funzioni. Corso di Fondamenti di Informatica

Creare una funzione float square(float x). La funzione deve restituire il quadrato del parametro x.

Laboratorio di Informatica L-A 1. ne: M se macchina, P se parte Nel caso di macchina seguono: L identificatore

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Procedura operativa per la gestione della funzione di formazione classi prime

Tipi elementari, costanti. Tipi di dati. VALORI: un insieme dei valori del tipo OPERAZIONI: per operare su tali valori. Tipi. intero reale carattere

Gestione risorse (Windows)

Gestione delle stringhe in C

Alfabeto ed elementi lessicali del linguaggio C

SOLUZIONE ESERCIZIO 1

Matlab: Gestione avanzata dei file

18/05/2016 MANUALE UTENTE

RICORSIONE - schema ricorsivo (o induttivo) si esegue l'azione S, su un insieme di dati D, mediante eventuale esecuzione di

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

Il rapporto (o il suo inverso) tra -2.5 e vale Soluzione. #include <stdio.h> typedef enum{false, true} bool;

Via Oberdan, 42, Faenza (RA) Italy Tel.: Fax: WAVE MODE MOBILE GUIDA RAPIDA

Esercizi svolti durante le ore di Informatica e Sistemi automatici nelle classi del Liceo Scientifico Tecnologico del Liceo Milli di Teramo

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Questa è la finestra dei dettagli, è possibile selezionare anche da qui un modello o un pezzo per essere aperto.

per immagini guida avanzata Modificare il contenuto del foglio di lavoro Geometra Luigi Amato Guida Avanzata per immagini Excel

Matrici Vettori di stringhe. Programmazione in C. Riferimenti al materiale

Alcune regole di base per scrivere un programma in linguaggio C

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Concetti chiave. Struct. Variabili strutturate: il tipo struct Elementi di una struttura typedef e struct Array di strutture

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Aggiorna. La Funzione Aggiorna Listino Aggiornare Listino Pr7 / Le connessioni / Listino METEL. Aggiorna Lis no. Aggiornamento del listino

La programmazione nel linguaggio C

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3. 1 strace : visualizzazione delle system call invocate da un processo

CORSO DI SISTEMI OPERATIVI A - ESERCITAZIONE 3

INTRODUZIONE ALLE BASI DATI RELAZIONALI

Breve riepilogo della puntata precedente:

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

Esame di Informatica Generale 25 giugno 2012 Professori: Carulli, Fiorino. Docente Risultati Scritto Fiorino Carulli

Introduzione alla programmazione in C

Visualizzazione grafica. dell'output di un programma con GNUplot

1 Automi Cellulari (Rev )

Esercitazione 3. Corso di Fondamenti di Informatica

Esercitazione 7. Procedure e Funzioni

Introduzione al C. Unità 1 - Introduzione

Angelo Gallippi. Fondamenti di informatica

Programma Richiesta riproduzione RFID versione 1.0

PSICOMETRIA. Esercitazione n.1. C.d.L. Comunicazione e Psicologia a.a. 2012/13

Symantec IT Management Suite 8.0 powered by Altiris technology

Marziana Monfardini lezioni di word

Retrò 365 MANUALE DELL'AMMINISTRATORE

Cos è una stringa (1) Stringhe. Leggere e scrivere stringhe (1) Cos è una stringa (2) DD Cap. 8 pp KP Cap. 6 pp

Linguaggio C: introduzione

Informatica I Facoltà di Ingegneria Prova scritta del 20/01/2014 TURNO A

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

XML e Windows Phone. Semplice tutorial per l'utilizzo di documenti e dati XML in un'app per Windows Phone.

IL MIO PRIMO IPERTESTO CON POWERPOINT

ANAGRAFE NAZIONALE CREDITI FORMATIVI. Manuale utente

Transcript:

Lettura e scrittura di caratteri per leggere caratteri: getchar(void); Laboratorio di linguaggi per scrivere caratteri: putchar(int); Le molte volte l input viene bufferizzato fino al tasto ENTER 1 2 Lettura e scrittura di caratteri Lettura e scrittura di caratteri #include<ctype.h> char ch; do ch=getchar(); if(islower(ch)) ch=toupper(ch); else ch=tolower(ch); putchar(ch); while(ch!='.'); 3 4 Lettura e scrittura di caratteri Lettura e scrittura di stringhe getch(): restituisce il valore subito senza visualizzarlo getche(): restituisce il valore subito e lo visualizza riscrivendo l ultimo programma con getch() si può osservare la differenza per leggere stringhe: gets(char *) per scrivere stringhe: puts(char *) la funzione gets() legge fin si preme il tasto ENTER 5 6 1

Lettura e scrittura di stringhe char s[100]; gets(s); puts(s); prototipo: int printf(const char *str,...); restituisce il numero di caratteri scritto o un valore negativo in caso di errore str è formata da caratteri da visualizzare specificatori che definiscono il modo in cui gli argomenti successivi vengono visualizzati 7 8 per esempio printf("%d e` il %s preferito", 5, "mio numero"); produce 5 e` il mio numero preferito lo specificatore %c serve per visualizzare caratteri: printf("%c%c%c%c\n", 'c','i','a','o'); produce ciao 9 10 per definire la minima ampiezza del campo: printf("%2c%3c%4c%5c\n", 'c','i','a','o'); printf("%-2c%-3c%-4c%-5c\n", 'c','i','a','o'); produce c i a o c i a o 11 per visualizzare numeri %d o %i anche qui si può definire la minima ampiezza: #include<math.h> int i1,i2; 12 2

for(i1=2;i1<=4;i1++) for(i2=1;i2<5;i2++) printf("%d ", (int)pow(i1,i2)); printf("\n"); senza definire la minima ampiezza: 2 4 8 16 32 3 9 27 81 243 4 16 64 256 1024 con printf("%4d ",... : 2 4 8 16 32 3 9 27 81 243 4 16 64 256 1024 13 14 per visualizzare numeri in virgola mobile %f, %e, %E, %g, %G: printf("%f\n", 123.456); 123.456000 printf("%e\n", 123.456); 1.234560e+002 printf("%e\n", 123.456); %g sceglie il più breve tra %f e %e %G sceglie il più breve tra %f e %E per esempio: for(i1=1;i1<10;i1++) printf("%g\n", pow(10,i1)); produce: 1.234560E+002 15 16 10 100 1000 10000 100000 1e+006 1e+007 1e+008 1e+009 per specificare la precisione printf("%x.yf",num); visualizza num usando almeno x caratteri visualizza num con y cifre decimali si applica anche a %e e %E 17 18 3

"%f" "%12f" "%.10f" "%.5f" "%.4f" "%12.3f" "%.2f" "%2.1f" 1234.567890 1234.567890 1234.567890 1234.5678900000 1234.56789 1234.5679 1234.568 1234.57 1234.6 19 "%e" "%12e" "%.10e" "%.5e" "%.4e" "%12.3e" "%.2e" "%2.1e" 1234.567890 1.234568e+003 1.234568e+003 1.2345678900e+003 1.23457e+003 1.2346e+003 1.235e+003 1.23e+003 1.2e+003 20 per visualizzare interi in formato ottale oppure esadecimale: %o, %x, %X un esempio: for(i1=3;i1<30;i1+=3) printf("%2d %2o %2x %2X\n", i1,i1,i1,i1); produce: 21 3 3 3 3 6 6 6 6 9 11 9 9 12 14 c C 15 17 f F 18 22 12 12 21 25 15 15 24 30 18 18 27 33 1b 1B 22 per visualizzare un indirizzo: %p int i1,i2; printf("&i1: %p, &i2: %p\n", &i1,&i2); produce &i1: 0022FF64, &i2: 0022FF60 lo specificatore %n serve per sapere quanti caratteri erano gia stampati printf("quanti %ncaratteri\n", &x); printf("x: %d\n",x); produce quanti caratteri x: 7 23 24 4

per visualizzare stringhe: %s %x.ys visualizza la stringa in almeno x caratteri e senza superare y caratteri char *str="una stringa"; printf("%s\n", str); printf("<%20s>\n", str); printf("<%-20s>\n", str); printf("%5.8s\n", str); produce una stringa < una stringa> <una stringa > una stri 25 26 il modificatore * serve per definire la minima ampiezza e la precisione tramite argomenti del printf: double y=123.456; printf(" %*.*f, %*.*f\n", 10,2,y,5,1,y); produce 123.46, 123.5 serve per leggere valori prototipo int scanf(const char* str,...); la stringa determina il modo in cui vengono letti i valori ulteriori argomenti determinano dove vengono letti i valori 27 28 la stringa di controllo è formata da specificatori di formato spazi caratteri diverse da spazi specificatore indica il tipo dei dati specificatore: % e un carattere restituisce il numero di elementi a cui è stato assegnato un valore per leggere numeri interi di tipo int: %d o %i int x; scanf("%d",&x); printf("%d\n",x); per numeri ottali: %o per numeri esadecimali: %h 29 30 5

int x; scanf("%o",&x); printf("%d\n",x); se inserisco "23", stampa "19" int x; scanf("%o",&x); printf("%d\n",x); se inserisco "ab", stampa "171" per leggere numeri in virgola mobile di tipo float: %e,%f o %g float a; scanf("%f",&a); printf("%f\n",a); se inserisco "1.2", stampa "1.200000" se inserisco "1.1e2", stampa "110.000000" 31 32 per leggere un numero intero di tipo short: %hd, %hi, %ho o %hx per leggere un numero intero di tipo long: %ld, %li, %lo o %lx per leggere un numero in virgola mobile di tipo double: %le, %lf, %lg: double a; scanf("%lf",&a); 33 per leggere stringhe: %s char s[100]; scanf("%s",s); printf("la stringa: %s\n",s); legge solo la prima parola se inserisco "ciao", stampa "ciao" se inserisco "ciao mamma", stampa "ciao" per leggere caratteri: %c 34 si può leggere più di un valore char x,y,z; scanf("%c%c%c",&x,&y,&z); printf(" %c %c %c\n",x,y,z); se inserisco "abc", stampa "a b c" un spazio nella stringa di controllo fa saltare eventuali spazi vuoti del input senza spazi: scanf("%c%c%c",&x,&y,&z); printf(" %c %c %c\n",x,y,z); se inserisco "a b c", stampa " a c" 35 36 6

con spazi: scanf("%c %c %c",&x,&y,&z); printf(" %c %c %c\n",x,y,z); se inserisco "a b c", stampa " a b c" salta non solo spazi ma anche tabulazione e codice di fine riga caratteri diversi di spazi vengono eliminati int x,y; scanf("%d,%d",&x,&y); printf("%d,%d\n",x,y); inserisco "1,2", stampa "1,2" inserisco "1 2", stampa "1,4206592" inserisco "1, 2", stampa "1,4206592" 37 38 caratteri diversi di spazi vengono eliminati int x,y; scanf("%d, %d",&x,&y); printf("%d,%d\n",x,y); inserisco "1,2", stampa "1,2" inserisco "1 2", stampa "1,4206592" inserisco "1, 2", stampa "1,2" 39 gruppo di scansione: vengono accettati solo i caratteri del gruppo: char s1[10],s2[10]; scanf("%[abcdefghi]%s",s1,s2); printf("s1: %s, s2: %s\n",s1,s2); risultato: "ciaomam" => "s1: cia, s2: omam" "ciao mam" => "s1: cia, s2: o" "ciao_mam" => "s1: cia, s2: o_mam" 40 lunghezza massima di una stringa: char s1[10]; scanf("%5s",s1); printf("s1: %s\n",s1); risultato: "ciaomamma" => "s1: ciaom" il input è bufferizzato: se un scanf() non legge tutti i caratteri inseriti, quelli non letti vengono letti dalla prossima scanf() l'utente è chiesto di inserire soltanto quando il buffer è vuoto 41 42 7

char s1[10]; int x; scanf("%d",&x); printf("x: %d\n",x); scanf("%s",s1); printf("s1: %s\n",s1); inserisco "123 alma", stampa: x: 123 s1: alma 43 il valore restituito serve per controllare cos'è successo: int x,y,r; r=scanf("%d,%d",&x,&y); printf("r: %d, x: %d, y: %d\n", r,x,y); risultato: "1,2" => "r: 2, x: 1, y: 2" "1 2" => "r: 1, x: 1, y: 4206592" 44 I/O da un file Apertura di un file operazioni vengono effettuati tramite un puntatore a file: punta a dati che definiscono varie informazioni su un file: nome posizione all'interno del file tipo di file il tipo FILE definito in stdio.h 45 la funzione fopen() serve per aprire un file: FILE *fopen(char *nome, char *modalita); la prima stringa definisce il nome la seconda il modo in cui viene aperta il file restituisce un puntatore restituisce NULL in caso di fallimento 46 Modalità di apertura di un file Modalità di apertura di un file Modalità r w Tipo testuale testuale Per lettura scrittura Azione apre crea Modalità r+ w+ Tipo testuale testuale Per lettura/scr. lettura/scr. Azione apre crea a testuale aggiungere apre o crea a+ testuale lettura/agg. apre o crea rb binario lettura apre r+b binario lettura/scr. apre wb binario scrittura crea w+b binario lettura/scr. crea ab binario aggiungere apre o crea a+b binario lettura/agg. apre o crea 47 48 8

Apertura di un file per esempio f=fopen("prova","r"); if f non è NULL il file è aperto e possiamo leggerlo Chiusura di un file la funziona fclose() serve per chiudere un file: int fclose(file *p); esegue una chiusura formale del file la mancata chiusura può provocare perdita di dati in caso di successo il valore restituite è zero 49 50 Scrivere in un file testuale la funzione fprintf() serve per scrivere caratteri in un file: int fprintf(file *f, const char *str,...); funziona nello stesso modo come printf() il primo argomento definisce quale file vogliamo scrivere 51 Scrivere in un file testuale int i1,i2; if((f=fopen("prova","w"))==null) 52 Scrivere in un file testuale Scrivere in un file testuale for(i1=1;i1<=5;i1++) for(i2=1;i2<=5;i2++) fprintf(f," %2d ",i1*i2); fprintf(f,"\n"); viene creato un file con contenuto: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 53 54 9

Scrivere in un file testuale if((f=fopen("prova","a"))==null) fprintf(f,"bella tabella"); 55 Scrivere in un file testuale viene aggiunta la stringa alla fine del file: 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 Bella tabella 56 Leggere da un file testuale per leggere da un file testuale serve la funzione fscanf(): int fscanf(file *f, const char* str,...); funziona nello stesso modo come scanf() il primo argomento definisce quale file vogliamo leggere Leggere da un file testuale int i1,x; char s[100]; 57 58 Leggere da un file testuale Leggere da un file testuale if((f=fopen("prova","r"))==null) for(i1=1;i1<=25;i1++) fscanf(f,"%d",&x); printf("%d\n",x); fscanf(f,"%s",s); printf("%s ",s); fscanf(f,"%s",s); printf("%s",s); 59 60 10

Leggere da un file testuale legge il numeri della tabella e la ultima riga: 1 2 3... 20 25 Bella tabella La funziona feof() per sapere quando sono arrivato alla fine di un file serve la funziona feof(): int feof(file *f); restituisce 1 quando viene raggiunta la fine del file restituisce 0 altrimenti 61 62 La funziona feof() La funziona feof() char s[100]; if((f=fopen("prova","r"))==null) while(!feof(f)) fscanf(f,"%s",s); printf("%s\n",s); 63 64 La funziona feof() La funziona rewind() legge tutte le stringhe del file prova: 1 2... 20 25 Bella tabella serve per ritornare all'inizio del file: char s[100]; if((f=fopen("prova","w+"))==null) 65 66 11

La funziona rewind() La funziona rewind() fprintf(f,"%s", "Scrivo nel file"); fscanf(f,"%s",s); printf("s: %s\n",s); rewind(f); fscanf(f,"%s",s); printf("s: %s\n",s); 67 l'output: s: s: Scrivo 68 Scrivere in un file binario Scrivere in un file binario la funzione fwrite() può essere usata per scrivere in un file binario: size_t fwrite(void * buffer, size_t num_bytes, size_t count, FILE *f); argomenti di fwrite() buffer: puntatore a una regione di memoria dove si trovano i dati da scrivere num_bytes: numero di bytes di un oggetto count: numero di oggetti da scrivere f: puntatore a file dove vengono scritti i dati 69 70 Leggere da un file binario Leggere da file binario la funzione fread() può essere usata per leggere da file binario: size_t fread(void * buffer, size_t num_bytes, size_t count, FILE *f); argomenti di fread() buffer: puntatore a una regione di memoria dove i dati vengono letti num_bytes: numero di bytes di un oggetto count: numero di oggetti da leggere f: puntatore a file da dove vengono letti i dati 71 72 12

Scrivere/leggere da file binario double x=1.3,xx; long int y=100,yy; if((f=fopen("prova","wb+"))==null) 73 Scrivere/leggere da file binario fwrite(&x,sizeof(double),1,f); fwrite(&y,sizeof(long int),1,f); rewind(f); fread(&xx,sizeof(double),1,f); fread(&yy,sizeof(long int),1,f); printf("xx: %f, yy: %ld\n", xx,yy); 74 Scrivere/leggere da file binario si può leggere/scrivere strutture intere con fread() e fwrite(): typedef struct char titolo[80]; char autore[40]; int anno; libro; 75 Scrivere/leggere da file binario libro l,ll; strcpy(l.titolo,"candido"); strcpy(l.autore,"voltaire"); l.anno=1757; if((f=fopen("prova","wb+"))==null) 76 Scrivere/leggere da file binario fwrite(&l,sizeof(libro),1,f); rewind(f); fread(&ll,sizeof(libro),1,f); printf("%s: %s (%d)\n", ll.autore,ll.titolo,ll.anno); La funzione fseek() la funzione fseek() serve per spostare l'indicatore di posizione int fseek(file *f, long int numbytes, int origin); 77 78 13

La funzione fseek() posiziona rispetto al variabile origin: origin SEEK_SET SEEK_CUR SEEK_END posizione nuova inizio + numbytes posizione attuale + numbytes fine del file + numbytes 79 La funzione fseek() int i1; if((f=fopen("prova","wb+"))==null) for(i1=1;i1<=10;i1++) fwrite(&i1,sizeof(int),1,f); 80 La funzione fseek() La funzione fseek() fseek(f,3*sizeof(int),seek_set); fread(&i1,sizeof(int),1,f); printf("%d ",i1); fseek(f,-4*sizeof(int),seek_end); fread(&i1,sizeof(int),1,f); printf("%d\n",i1); fseek(f,4*sizeof(int),seek_cur); fread(&i1,sizeof(int),1,f); printf("%d ",i1); 81 82 La funzione fseek() l'ouput: 4 9 7 SEEK_SET SEEK_SET+3*4 SEEK_SET-4*4 SEEK_END 1 2 3 4 5 6 7 8 9 10 SEEK_CUR SEEK_CUR+4*4 83 14