2010-10-01 3 views
5

Je sais quand je dois imprimer J'utilise p->real et ainsi de suite mais que dois-je écrire quand je lis des nombres en utilisant scanf?Comment lire des valeurs dans une structure en utilisant des pointeurs?

#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

Juste une question: êtes-vous sûr que les membres de votre Sturcture devriez être 'int', pas' 'float' ou double'? – Benoit

+1

J'ai donc corrigé la mise en forme de votre code et modifié l'indentation afin qu'elle soit lisible. C'est vraiment utile aux gens si vous faites cela quand vous postez votre question originale ... –

+0

@ mark- comment puis-je formater le code? aide aimablement. – Kraken

Répondre

10

Vous pouvez écrire:

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

mais cela dépend fortement du format dans lequel les numéros viennent.

+4

Je dirais probablement '& (p-> real)', juste pour des raisons de clarté. –

4

scanf vous oblige à passer la adresse de l'espace mémoire vous voulez stocker le résultat dans, contrairement printf, qui ne nécessite que la valeur (il ne pouvait pas moins de soins la valeur réside). Pour obtenir l'adresse d'une variable en C, vous utilisez l'opérateur &:

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

Signification: lire un entier dans l'adresse I spécifié, dans ce cas, l'adresse d'un. La même chose vaut pour les membres struct, que l'struct se trouve sur la pile ou tas, accessible par pointeur, etc:

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

Et ce lirait un entier dans l'adresse de pointeur plus le décalage de membre dans la structure.

-2

Utiliser code suivant:

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

Il n'y a rien de mal à ajouter une réponse tardive à une question, mais cette réponse n'ajoute rien à la conservation, c'est simplement une copie des deux précédentes d'il y a deux ans. S'il vous plaît ajouter quelques informations supplémentaires lorsque vous répondez aux questions plutôt que de simplement copping réponses déjà acceptées. – Mike

Questions connexes