fscanf ed &
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.