2010-10-01 16 views
5

Ich weiß, wenn ich drucken muss verwende ich p->real und so weiter, aber was soll ich schreiben, wenn ich Zahlen unter Verwendung scanf lesen?Wie lese ich Werte in eine Struktur mit Zeigern?

#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

Nur eine Frage: Sind Sie sicher, dass Ihre sturcture Mitglieder sollten 'int', nicht' float' oder 'double'? – Benoit

+1

Also habe ich die Formatierung Ihres Codes korrigiert und den Einzug so geändert, dass er lesbar war. Es ist wirklich hilfreich für Leute, wenn Sie dies tun, wenn Sie Ihre ursprüngliche Frage bekannt geben ... –

+0

@ Mark- wie formatiere ich den Code? freundlich helfen. – Kraken

Antwort

10

können Sie schreiben:

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

aber das hängt stark von dem Format, in dem die Zahlen kommen.

+4

Ich würde wahrscheinlich '& (p-> real)' nur aus Gründen der Klarheit sagen. –

4

scanf erfordert, dass Sie die Adresse passieren des Speicherplatzes Sie das Ergebnis in speichern möchten, im Gegensatz zu printf, die nur den Wert erfordert (es wurscht wo der Wert befindet). Um die Adresse einer Variablen in C zu erhalten, verwenden Sie die & Betreiber:

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

Bedeutung: eine ganze Zahl in die Adress lesen ich angegeben, in diesem Fall die Adresse ein. Das gleiche gilt für die Strukturkomponenten, und zwar unabhängig davon, ob die Struktur selbst befindet sich auf dem Stapel oder Haufen, der durch Zeiger zugegriffen, etc:

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

Und das würde eine ganze Zahl in die Adresse des pointer plus der Versatz gelesen Mitglied in die Struktur. Nach Code

-2

Verwendung:

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

Es ist nichts falsch daran, einer Frage eine späte Antwort hinzuzufügen, aber diese Antwort fügt nichts zur Erhaltung hinzu, es ist einfach ein Duplikat der beiden vorherigen von zwei Jahren. Bitte fügen Sie zusätzliche Informationen hinzu, wenn Sie Fragen beantworten, anstatt nur bereits akzeptierte Antworten zu kopieren. – Mike

Verwandte Themen