Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

Puntatori Linguaggio C.
Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
LINGUAGGIO DI PROGRAMMAZIONE C
INFORMATICA Algoritmi fondamentali
Nel C non esiste un dato primario di tipo stringa; queste sono rappresentate con un array monodimensionale di caratteri (tipo char). Così per definire.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
PUNTATORI Introduzione
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Introduzione al linguaggio C
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA I file.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Caratteri e stringhe di caratteri
Ambito delle variabili
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
Funzioni definite dall’utente
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Stringhe e Puntatori Marco D. Santambrogio – Ver. aggiornata al 18 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
Introduzione agli stream e alle classi
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Esercizi Puntatori, struct con campi puntatore, puntatori a struct, rapporto tra array e puntatori. FUNZIONI Passaggio di parametri per indirizzo, passaggio.
I File.
Le funzioni.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
Prova di verifica Fondamenti Informatica 1 15 Febbraio 2008.
2000 Prentice Hall, Inc. All rights reserved. Capitolo 10 (Deitel) Strutture, unioni ed enumerazioni Sommario Introduzione Definire le strutture.
Il linguaggio C Le funzioni C Language Il passaggio dei parametri
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Unità Didattica 3 Linguaggio C
Passaggio di parametri per indirizzo
Di Luca Santucci 5° Programmatori
Esercizi su File.
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Ripetizione La vera potenza dei programmi per computer risiede nella capacità di ripetere lo stesso calcolo o sequenza di istruzioni più volte, ogni volta.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Vettori, indirizzi e puntatori Finora abbiamo usato gli indirizzi nel chiamare  la funzione scanf()  le altre funzioni per riferimento Tuttavia la vera.
Vettori (a una dimensione)
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
I FILE I File sono l’ unità base di informazione nell’interazione tra utente e sistema operativo I File sono l’ unità base di informazione nell’interazione.
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
10/10/20021 Ingresso e uscita in Java F. Bombi 10 ottobre 2002.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
Manuale Utente – i-Sisen Questionario del Gas Naturale
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
Transcript della presentazione:

Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea dei comandi. Così, mentre il programma vendite.exe viene eseguito scrivendo semplicemente dalla linea dei comandi C> vendite per eseguire lo stesso programma passando alla sua funzione main() gli argomenti filiale, sede si scriverebbe: C:\> vendite filiale sede Quando riceve la precedente linea di comandi, il sistema operativo la memorizza come una sequenza di tre stringhe, ciascuna delle quali termina con il carattere NULL ( \0 ):

Affinché la funzione main() possa accettare gli argomenti che le vengono passati, è sufficiente che la sua definizione contenga un numero e un vettore: il numero è una variabile intera, di nome argc (da argument counter), che indica il numero totale di voci della linea dei comandi (nel nostro caso 3: il nome del programma e i due argomenti); il vettore è una lista unidimensionale, di nome argv (da argument values), costituita dai puntatori che contengono gli indirizzi di partenza in cui sono memorizzate le singole stringhe digitate nella linea dei comandi (vedi figura)

Ricordando allora che argc è un intero e argv un vettore i cui elementi sono indirizzi che puntano alle locazioni dove sono memorizzati gli effettivi comandi della linea dei comandi, lintestazione della funzione che riceve i due argomenti è: void main(int argc, char *argv[]) Il seguente programma argomenti verifica la precedente descrizione stampando i dati effettivamente passati a main() ; in esso la variabile argv[i] contiene un indirizzo, mentre la notazione char *argv[i] si può leggere: argv è un vettore i cui elementi sono puntatori a caratteri. #include /* nome programma: argomenti */ void main(int argc, char *argv[]) { int i; printf("\nIl n° di voci nella linea dei comandi è %d\n\n",argc); for (i = 0; i < argc; i++) { printf("Lindirizzo memorizzato in argv[%d] è %p\n",i,argv[i]); printf("Il carattere puntato è %c\n", *argv[i]); }

Si osservi il diverso risultato che si ottiene eseguendo il programma argomenti con il comando C:\> argomenti oppure con un comando del tipo C:\> argomenti a b c Una volta che gli argomenti siano passati a un programma dalla linea dei comandi, essi possono essere usati come qualsiasi altra stringa. Il seguente programma argomain fa visualizzare gli argomenti della linea dei comandi dallinterno della funzione main(). #include /* nome programma: argomain */ void main(int argc, char *argv[]) { int i; printf(\nI seguenti argomenti sono passati a main(): ); for (i = 1; i < argc; i++) printf(%s, argv[i]); printf(\n); }

Se si esegue il programma argomain scrivendo il comando C:\> argomain vendite filiale si ottiene la seguente uscita: I seguenti argomenti sono passati a main(): vendite filiale Osservazione. Quando nel programma argomain gli indirizzi in argv[] sono passati alla funzione printf(), vengono visualizzate le stringhe puntate da questi indirizzi. Quando gli stessi indirizzi sono stati passati alla funzione printf() nel programma argomenti, sono stati visualizzati i valori attuali degli indirizzi. La differenza nella visualizzazione è causata dalla funzione printf() : quando in essa si usa una sequenza di controllo %s (come nel programma argomain ), essa avverte la funzione che si accederà a una stringa. Quindi printf() si aspetta lindirizzo del primo carattere della stringa, che viene appunto fornito da ogni elemento di argv[].

Quando printf() riceve lindirizzo, essa esegue la indirezione necessaria per localizzare leffettiva stringa che viene visualizzata. La sequenza di controllo %p usata nel programma argomenti visualizza il valore dellindirizzo memorizzato in argv[i]. Come abbiamo già notato, dato che i puntatori sono un tipo di dati unico, C fornisce la specifica sequenza di controllo - %p - per luscita degli indirizzi memorizzati in variabili puntatore. Osservazione. Poiché ogni argomento scritto nella linea dei comandi è considerato una stringa, se si vogliono passare a main() dati numerici è necessario convertire dapprima le stringhe in numeri. Tuttavia ciò è raramente necessario, dato che la maggior parte degli argomenti della linea dei conandi sono usati come indicatori per passare a un programma gli opportuni segnali di controllo dellelaborazione.

Copia di un file. Come esempio di utilizzazione del passaggio di parametri a una funzione dalla linea dei comandi, modifichiamo il precedente programma copiafile nel seguente copiargo, in modo che riceva come parametri dalla linea dei comandi il nome del file da copiare (ad es. salve.txt ) e di quello copiato (ad es. salvebis ).

#include /* nome del programma: copiargo */ int main(int argc, char *argv[]) { FILE *in_file; FILE *out_file; int c; if(argc != 3) printf("Errore nel numero dei parametri\n"); else { if((in_file=fopen(argv[1], "r")) != NULL) { if((out_file=fopen(argv[2], "w")) != NULL) { while((c=fgetc(in_file)) != EOF) fputc(c, out_file); } else printf("Il file \"%s\" non può essere aperto\n",argv[2]); } else printf("Il file \"%s\" non può essere aperto\n",argv[1]); }

Quando si esegue il programma copiargo, se nella linea dei comandi non sono stati indicati tre argomenti ( argc è diverso da 3) viene visualizzato un messaggio di errore e il programma termina. In caso contrario, il vettore argv[] contiene le stringhe copiargo, salve.txt e salvebis, le ultime due delle quali sono usate dal programma come nomi di file, che saranno aperti dalla funzione fopen(). Se entrambi i file sono aperti con successo, vengono letti i caratteri dal file salve.txt e scritti nel file salvebis finché nel primo non si incontra il carattere di fine-file, che fa terminare lesecuzione del programma. Il risultato sarà una copia esatta del file salve.txt nel file salvebis.

Reindirizzamento di input e output (operatore > ) La visualizzazione prodotta dalla funzione printf() viene di solito inviata al terminale di lavoro. Esso è detto dispositivo di uscita standard perché è il posto al quale, in condizioni standard, linterfaccia tra il programma C e il sistema operativo del computer indirizza automaticamente la visualizzazione. È tuttavia possibile reindirizzare luscita prodotta da printf() verso un altro dispositivo, o verso un file, tramite loperatore di reindirizzamento > nel momento in cui si chiama il programma. Oltre al simbolo, si deve specificare dove si vuole che siano inviati i risultati visualizzati. Ad es., supponiamo che per eseguire un programma si debba impartire, al prompt del sistema, il comando C:\> vendite

Se vogliamo che la visualizzazione prodotta dal programma sia inviata, anziché allo schermo al file di nome risultati, dovremo impartire il comando C:\> vendite > risultati Il simbolo di reindirizzamento > dice al sistema operativo di inviare ogni visualizzazione prodotta da printf() direttamente al file di nome risultati, anziché al dispositivo di uscita standard usato dal sistema. La visualizzazione inviata a risultati può poi essere esaminata con un programma di editazione o un opportuno comando del sistema operativo (in Linux il contenuto del file di testo risultati si visualizza con il comando cat risultati, in MS-DOS il comando type risultati ). Nel reindirizzamento si possono verificare due casi: -se il file non esiste, esso viene creato; -se il file esiste, esso viene sovrascritto.

Aggiunta di input e output (operatore >> ) Analogo alloperatore di reindirizzamento, è loperatore di aggiunta delloutput >>, che si usa come loperatore di reindirizzamento, ma fa sì che ogni nuovo output sia aggiunto alla fine di un file. Ad esempio il comando C:\> vendite >> risultati fa sì che ogni output prodotto da vendite sia aggiunto alla fine di risultati. Se il file risultati non esiste, viene creato.