C Pointer Struct

Blanka

Lt. Junior Grade
Registriert
Dez. 2008
Beiträge
396
Ich möchte ausgeben was ich vorher in "mw" gespeichert habe aber irgendwie spuckt
er glaub ich immer nur die adresse aus.

was mache ich falsch?

em ende des codes ist die stelle (new->....)

Code:
//#include <liste.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <ctype.h>
#include <malloc.h>


typedef struct node {
     struct node *rgt;		/* Zeiger auf rechtes Element   */
     struct node *lft;		/* Zeiger auf linkes Element    */
     struct data *pdt;		/* Zeiger auf Datenstruktur     */
} nd_T;

typedef struct header{
     int     len;           /* Länge der Liste               */
     nd_T   *bgn;           /* Zeiger auf Listenanfang       */
     nd_T   *end;           /* Zeiger auf Listenende         */
} hd_T;

typedef struct data{
	 int   number;		/* Nummer der Ware		*/
	 int mw;		/* Menge der Ware in qm		*/
	 char  preis;		/* Preiskategorie A, B oder C	*/
} dt_T;


nd_T *create_node();


nd_T *create_node(void) {
	  nd_T *new;
	if (new = (nd_T *)malloc(sizeof(nd_T))) {
	  new->pdt = (dt_T *)malloc(sizeof(dt_T));
	  new->rgt = new->lft = NULL; }
	else printf("Fehler in create()!\n");
    return(new);
	}

int main(void){

hd_T head;
head.len = 0; // Liste ist leer
head.bgn = head.end = NULL;

//Zeiger auf Listenkopf
hd_T *ph = (hd_T *)malloc(sizeof(hd_T));
ph->len = 0; // Liste ist leer
ph->bgn =  NULL;
ph->end = NULL;

nd_T *new = create_node();
printf("Warenmenge in qm eingeben: ");
fgets(new->pdt->mw, 50, stdin);
printf("%d", new->pdt->mw);


getch();

}
 
Zeile 35 ein = vergessen?
Weiter hab ich nich geguckt.

Edit: Achso ne das funzt ja sogar :)

Bist du sicher das fgets in einen integer schreiben kann?
 
Zuletzt bearbeitet:
darf man in c überhaupt instanzen einer datenstruktur "new" nennen? An sich ist das doch ein Schlüsselwort. Probier einfach mal einen anderen Namen.
 
habs mit scanf probiert und new ersetzt . klappt leider immer noch nicht
 
scanf("%d",&neu->pdt->mw);

so gehts bei mir. New musste ich ersetzen weil ich nen c++ compiler genutzt hab.
 
oh mann riesen dank :)

also was passiert da genau?

scanf erwartet einen int*. ich übergebe die adresse auf das was pdt zeigt ?
Ergänzung ()

und auf pdt komme ich über new ?
Ergänzung ()

oder die adresse auf das was new zeigt?

das ist so unglaublich verwirrend
 
Zuletzt bearbeitet:
SoDaTierchen schrieb:
darf man in c überhaupt instanzen einer datenstruktur "new" nennen? An sich ist das doch ein Schlüsselwort. Probier einfach mal einen anderen Namen.
Wenn man keine Ahnung hat... wie ging der Spruch noch?
 
Ach du weißt das selbst nicht ? :D

Du übergibst an scanf die Adresse von mw. Und an die Adresse von mw kommst du über die Adresse von new und die Adresse von pdt...

Um den Kram zu verstehen macht es Sinn dem ganzen erstmal vernünftige Namen zu geben node_T, tNode oder so ;) Das ist schon ziehmlich kryptischer Code, wenn du versuchst an dem zu lernen... weiß nicht ob das so sinnvoll ist.
 
Zurück
Oben