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.

Il programma legge delle stringhe di testo con fgets d<strong>alla</strong> console (il file di input è stdin),<br />

di lunghezza massima pari a 100 caratteri. Si noti il prezioso uso dell’o<strong>per</strong>atore sizeof nella<br />

chiamata a fgets. La stringa letta viene analizzata con sscanf, la quale si aspetta il nome dello<br />

studente, cioè una stringa, e il voto, cioè un intero. Il ciclo continua fintanto che non viene<br />

immesso il carattere EOF (End Of File), che da tastiera equivale ad immettere il carattere Ctrl-<br />

D 4 . Nel ciclo viene tenuta traccia del numero di studenti e della media complessiva dei loro voti.<br />

I dati vengono memorizzati nel vettore di strutture stud soltanto se il voto immesso è valido,<br />

ovvero se è un intero compreso tra 18 e 30. Inoltre viene tenuta traccia del numero di immissioni<br />

non valide.<br />

12.7 Lettura di file strutturati con fgets e sscanf<br />

Quando un file ha una struttura nota, e tipicamente di tratta di file di testo che contengono<br />

informazioni strutturate, è possibile utilizzare lo schema di lettura basato su fgets e sscanf.<br />

Il programma seguente legge da standard input, con possibilità di redirezione dello standard<br />

input, una matrice di 5 elementi.<br />

#include <br />

#include <br />

#define N (5)<br />

int main()<br />

{<br />

char s[100];<br />

float m[N][4];<br />

int i;<br />

}<br />

i = 0;<br />

while (fgets(s, sizeof(s), stdin)) {<br />

sscanf(s, "%f %f %f %f", &m[i][0], &m[i][1], &m[i][2], &m[i][3]);<br />

printf("%f %f %f %f\n", m[i][0], m[i][1], m[i][2], m[i][3]);<br />

i++;<br />

}<br />

return 0;<br />

Da notare che il programma non effettua controlli sul fatto che vengano lette più righe di quelle<br />

memorizzabili nella matrice.<br />

12.8 I/O con le funzioni fscanf e fprintf<br />

Quando un file da leggere o scrivere ha una struttura nota è possibile anche usare le istruzioni<br />

fscanf e fprintf <strong>per</strong> la lettura e <strong>per</strong> la scrittura.<br />

Queste funzioni si comportano come le funzioni scanf e printf, già più volte utilizzate <strong>per</strong><br />

la lettura da tastiera e l’output a video. Le funzioni fscanf e fprintf hanno il medesimo<br />

4 Tenere premuti contemporaneamente i tasti Control e D.<br />

121

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

Saved successfully!

Ooh no, something went wrong!