Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
funzionamento: la differenza consiste nel fatto che è possibile specificare su quale file leggere e<br />
scrivere (anche i file standard stdin e stdout.<br />
Le due funzioni sono infatti definite come segue<br />
int fprintf(FILE *stream, const char *format, ...);<br />
int fscanf(FILE *stream, const char *format, ...);<br />
La differenza con le funzioni scanf e printf è che il primo parametro rappresenta il file sul quale<br />
scrivere (e leggere).<br />
Il programma seguente legge da standard input, con possibilità di redirezione dello standard<br />
input, una matrice di 4 colonne <strong>per</strong> un massimo di 5 righe. Il programma scrive su standard<br />
output la matrice moltiplicata <strong>per</strong> 2.<br />
#include <br />
#include <br />
#define N (5)<br />
int main()<br />
{<br />
float m[N][4];<br />
int i;<br />
}<br />
i = 0;<br />
while (!feof(stdin)) {<br />
fscanf(stdin, "%f %f %f %f",<br />
&m[i][0], &m[i][1], &m[i][2], &m[i][3]);<br />
fprintf(stdout, "%f %f %f %f\n",<br />
2 * m[i][0], 2 * m[i][1], 2 * m[i][2], 2 * m[i][3]);<br />
i++;<br />
}<br />
return 0;<br />
Per controllare la terminazione dell’input viene utilizzata la funzione feof, la quale ritorna<br />
non-zero se l’indicatore di fine file è impostato.<br />
Anche in questo caso, il programma non effettua controlli sul fatto che il numero di righe<br />
lette sia minore o uguale della dimensione della matrice.<br />
12.9 Esempio di lettura di matrici con fgets e sscanf<br />
I programmi illustrati nelle sezioni 12.7 e 12.8 assumevano che il numero di colonne fosse noto a<br />
priori, e quindi era possibile impostare l’istruzione sscanf of fscanf con il numero appropriato<br />
di parametri <strong>per</strong> leggere tutti i dati su ciascuna linea.<br />
Quando il numero di parametri su una linea non è noto a priori oppure è sconveniente elencare<br />
tutti i parametri uno <strong>per</strong> uno, è possibile utilizzare un approccio più adatto e generale.<br />
Il tipico esempio è quello della lettura di una matrice da un file (o standard input) che non<br />
abbia un numero di colonne noto a priori. In tal caso, non è possibile elencare esplicitamente le<br />
variabili nell’istruzione di scansione della stringa di input.<br />
122