2010-10-01 8 views
5

So quando devo stampare Io uso p->real e così via, ma cosa dovrei scrivere quando sto leggendo i numeri usando scanf?Come si leggono i valori in una struttura utilizzando i puntatori?

#include <stdio.h> 

typedef struct { 
    int real; 
    int imaginary; 
} complex; 

void read(complex*); 

void main() { 
    complex c; 
    read(&c); 
}  

void read(complex* p){ 
    /*what to write in scanf*/ 
} 
+0

Solo una domanda: Sei sicuro che i vostri membri sulla struttura delle dovrebbe essere 'int', non' float' o 'double'? – Benoit

+1

Quindi ho corretto la formattazione del codice e modificato il rientro in modo che fosse leggibile. È davvero utile per le persone se lo fai quando pubblichi la tua domanda originale ... –

+0

@ mark- come faccio a formattare il codice? gentilmente aiuto. – Kraken

risposta

10

Si può scrivere:

scanf("%d %d", &p->real, &p->imaginary); 

ma che dipende in larga misura il formato in cui i numeri venire.

+4

Direi probabilmente '& (p-> real)', solo per motivi di chiarezza. –

4

scanf richiede di passare l'indirizzo dello spazio di memoria che si desidera memorizzare il risultato in, a differenza printf, che richiede solo il valore (non potrebbe importare di meno cui risiede il valore). Per ottenere l'indirizzo di una variabile in C, si utilizza l'operatore di &:

int a; 
scanf("%d", &a); 

Significato: leggere un intero in l'indirizzo ho specificato, in questo caso l'indirizzo di un. Lo stesso vale per i membri struct, indipendentemente dal fatto che lo struct si risiede nello stack o heap, accessibile da puntatore, ecc:

struct some_struct* pointer = ........; 
scanf("%d", &pointer->member); 

E che avrebbe letto un numero intero nell'indirizzo di puntatore più l'offset di membro nella struttura.

-2

Usa codice a seguire:

scanf("%d",&pointer->variable); 
+0

Non c'è niente di sbagliato nell'aggiungere una risposta tardiva a una domanda, ma questa risposta non aggiunge nulla alla conservazione, è semplicemente un duplicato delle precedenti due di due anni fa. Per favore, aggiungi alcune informazioni aggiuntive quando rispondi alle domande piuttosto che limitarti alle risposte già accettate. – Mike

Problemi correlati