Salta ai contenuti. | Salta alla navigazione

Strumenti personali

fscanf ed &

importante

stavo studiando sul libro "Informatica:programmazione" McGraw-Hill edizione seconda e alla pagina 236 ho notato che alcune fscanf contengono la "&" altre invece no, sono corrette come riportate dal libro o c'è un errore?

La fscanf (cosi` come la scanf) utilizza il passaggio per indirizzo; questo significa che ha bisogno di sapere l'indirizzo della variabile in cui deve mettere il risultato. Per i tipi di dato scalari (es. int, char, float, ...) per ottenere l'indirizzo della variabile si usa la "&" (ed anche per le struct, che pero` non vengono gestite dalla fscanf).

Ad es:

FILE *fp;
int i;
char c;
fp=fopen ...
fscanf(fp,"%d",&i;);
fscanf(fp,"%c",&c;);

Per gli array la cosa e` diversa: in C quando si passa ad una funzione un array non si passa l'intero array, ma solo l'indirizzo alla prima cella dell'array. In pratica gli array vengono gia` passati per riferimento. Per questo motivo, non si deve mettere la "&" davanti al nome.

Nel caso della fscanf, il problema si pone solo per le stringhe, che sono array di caratteri. Scriveremo quindi:

char s[10];
fscanf(fp,"%s",s);
// non ci va la "&" perche' vogliamo leggere una stringa

fscanf(fp,"%c",&s;[2]);
// ci va la "&" perche' voglio leggere solo un carattere:
// quello di indice 2.