18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Nell’esempio, i singoli valori numerici sono delimitati da spazi: i delimitatori sono quindi gli spazi<br />

bianchi, mentre i singoli token sono le sottostringhe che rappresentano i valori numerici.<br />

La prima volta che la funzione strtok viene chiamata, riceve in ingresso la stringa da decomporre<br />

in token (s nell’esempio), e il separatore dei token (uno spazio, nell’esempio). Ogni<br />

successiva chiamata a strtok deve passare NULL come stringa, poichè questa è stata specificata<br />

nella prima chiamata. Ecco <strong>per</strong>chè nella chiamata ad strtok presente nel ciclo while il primo<br />

parametro è NULL. Il ciclo continua fintanto che strtok ritorna un puntatore valido (non nullo)<br />

che rappresenta il puntatore al primo carattere del token successivo. Gli indici che servono <strong>per</strong><br />

tenere traccia di quale elemento viene assegnato nella matrice sono opportunamente incrementati<br />

all’avanzare del numero di riga e colonna.<br />

12.10 Redirezione dell’input e dell’output<br />

Le funzioni di I/O come fgets, fputs, fscanf, fprintf e le altre funzioni che leggono e scrivono<br />

su file, <strong>per</strong>mettono la possibilità di redirigere l’input e l’output al momento dell’invocazione del<br />

programma da linea di comando.<br />

E’ sempre possibile utilizzare le funzioni indicate in sostituzione delle funzioni scanf e printf<br />

già ampiamente utilizzate, semplicemente indicando che letture e scritture avvengono sui file<br />

standard stdin e stdout. Per esempio, le coppie di istruzioni seguenti sono equivalenti, quando<br />

l’interazione utente avviene tramite tastiera e video:<br />

scanf("%d %f %s", &intero, &numero, stringa);<br />

fscanf(stdin, "%d %f %s", &intero, &numero, stringa);<br />

printf("%d %f %s\n", intero, numero, stringa);<br />

fprintf(stdout, "%d %f %s\n", intero, numero, stringa);<br />

Quando vengono utilizzate tali funzioni <strong>per</strong> la lettura/scrittura dei dati, è possibilie sfruttare<br />

la tecnica della redirezione dell’input/output da linea di comando, <strong>per</strong> fornire i valori di ingresso<br />

ad un programma e <strong>per</strong> specificare un file di output alternativo adstdout. Questo utile espediente<br />

sfrutta l’associazione tra il file standard stdin e il terminale (tipicamente la tastiera), e tra il file<br />

standard stdout e la console (il video).<br />

E’ possibile creare dei programmi che leggano il proprio input dal filestdin e poi, al momento<br />

di invocare il programma, usare l’o<strong>per</strong>atore di redirezione della shell <strong>per</strong> redirigere il contenuto<br />

di un file sullo standard input del programma. Molti programmi di sistema della shell di UNIX,<br />

come cat, possono essere usati efficacemente in questo modo.<br />

Allo stesso modo, i programmi che scrivono i dati su stdout possono essere rediretti <strong>per</strong><br />

scrivere i valori di uscita su un file genrico.<br />

12.10.1 Il programma count.c<br />

Il programma count.c conta il numero di caratteri che vengono letti dallo standard input.<br />

#include <br />

#include <br />

int main()<br />

{<br />

char s[100];<br />

124

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!