PDA

Visualizza la versione completa : [C] scanf() con Strutture


kNemo
25-04-2004, 15:42
struct orario {
short int ore;
short int minuti;
short int secondi;
};


Come mai nella scanf() ho dovuto inserire la & ???
in genere quando si ha un puntatore non serve la &
allora perche' qui l'ho dovuto mettere ???



struct orario ora1;
struct orario *sp;

sp = &ora1;
printf ("Inserisci ora : ");
scanf ("%d", &sp->ore);

Michele Facchin
25-04-2004, 15:54
Perchè la scanf() richiede l'indirizzo della variabile.

Nel tuo caso la variabile è in una struttura, quindi tu devi dargli l'indirizzo di quella variabile nella struttura, e quindi:



scanf ("%d", &sp -> ore);


Che equivale a:



scanf ("%d", &(*sp).ore);


E quindi a:



scanf ("%d", &ora1.ore);


Nota come le ultime due sono identiche, solo che una vale per il puntatore, l'altra direttamente sulla variabile.

bye

kNemo
25-04-2004, 16:00
ma in genere quando uso i puntatori non dico &puntatore

es.


char a;
char *b;

b = &a;
scanf("%d", b);


o sbaglio ???

Michele Facchin
25-04-2004, 16:02
Si certo, ma tu mica gli devi dare l'indirizzo della struttura.

Devi dargli l'indirizzo del campo della struttura.

:ciauz:

kNemo
25-04-2004, 16:05
a... Quindi Anche se uso un puntatore a struttura l'indirizzo lo devo dare comunque...

Grazie Mille...

Michele Facchin
25-04-2004, 16:11
Si certo, perchè ti ripeto:

L'indirizzo che passi è alla struttura, non al campo "ore" della struttura.


#include <stdio.h>

struct orario {
short int ore;
short int minuti;
short int secondi;
};

int main (void) {
short int *p;
struct orario ora1;
struct orario *sp = &ora1; /* assegno a sp, l'indirizzo di ora1 */
p = &sp -> ore; /* oppure &(*sp).ore */
printf ("Inserisci ora : ");
scanf ("%d", p); /* qui passo l'indirizzo del campo in qlla struct */
return (0);
}

bye :D

kNemo
25-04-2004, 16:14
Ok.. Adesso e' Ancora piu' Chiaro...
Grazie Infinite....

Loading