A leírás csak nyomtat ki az utolsó beírt

szavazat
1

Én teljesen új C és próbálok végre egy bináris fa C, amely tárolja a számot, és egy sor, majd nyomtassa ki őket pl

1 : Bread
2 : WashingUpLiquid
etc.

A kód, amit eddig is:

#include <stdio.h>
#include <stdlib.h>
#define LENGTH 300

struct node {
 int data;
 char * definition;
 struct node *left;
 struct node *right;
};

struct node *node_insert(struct node *p, int value, char * word);

void print_preorder(struct node *p);

int main(void) {
  int i = 0;
  int d = 0;
  char def[LENGTH];
  struct node *root = NULL; 

  for(i = 0; i < 2; i++)
  {
    printf(Please enter a number: \n);
    scanf(%d, &d);
    printf(Please enter a definition for this word:\n);
    scanf(%s, def);
    root = node_insert(root, d, def);
    printf(%s\n, def);
  }

  printf(preorder : );
  print_preorder(root);
  printf(\n);

  return 0;
}

struct node *node_insert(struct node *p, int value, char * word) {
  struct node *tmp_one = NULL;
  struct node *tmp_two = NULL;

  if(p == NULL) {
    p = (struct node *)malloc(sizeof(struct node));
    p->data = value;
    p->definition = word;
    p->left = p->right = NULL;
  }
  else {
    tmp_one = p;
    while(tmp_one != NULL) {
      tmp_two = tmp_one;
      if(tmp_one->data > value)
        tmp_one = tmp_one->left;
      else
        tmp_one = tmp_one->right;
    }

    if(tmp_two->data > value) {
      tmp_two->left = (struct node *)malloc(sizeof(struct node));
      tmp_two = tmp_two->left;
      tmp_two->data = value;
      tmp_two->definition = word;
      tmp_two->left = tmp_two->right = NULL;
    }
    else {
      tmp_two->right = (struct node *)malloc(sizeof(struct node)); 
      tmp_two = tmp_two->right;
      tmp_two->data = value;
      tmp_two->definition = word;
      tmp_two->left = tmp_two->right = NULL;
    }
  }

  return(p);
}

void print_preorder(struct node *p) {
  if(p != NULL) {
    printf(%d : %s\n, p->data, p->definition);
    print_preorder(p->left);
    print_preorder(p->right);
  }
}

Abban a pillanatban úgy tűnik, működik az intok, de a leírás csak részben kinyomtatja az utolsó beírt. Feltételezem, hogy van valami köze a mutatókat a chartömbben, de nem volt szerencsénk, hogy működjön. Bármilyen ötletet vagy tanácsot?

A kérdést 23/03/2010 00:53
a forrás felhasználó
Más nyelveken...                            


2 válasz

szavazat
2

Mindig csinál egy scanf a def, majd halad, hogy a betét rutint, amely csak ment a mutatót def. Tehát, mivel az összes mező a def puffer, akkor minden pont bármi volt az utolsó húr eltárolt hogy pufferben.

Be kell másolni a húr, és helyezze a mutatót a másolat bináris csomópontja.

Válaszolt 23/03/2010 01:00
a forrás felhasználó

szavazat
1

A probléma az, hogy te ugyanezt a puffert a húr. Figyeljük meg struct tartja a mutató egy char, és akkor halad azonos char tömb, mint a mutató minden egyes alkalommal.

Amikor hívja scanfa puffer, akkor az adatok megváltoztatása mutat rá, nem a mutatót is.

Ennek kiküszöböléséhez kiosztása előtt át szerkezetre, akkor StrDup . Tehát a kódsor válna

tmp_*->definition = strdup(word);

Tartsuk szem előtt, hogy a char tömb által visszaadott StrDup kell szabadítani, ha kész vele, mert akkor van szivárgás.

Válaszolt 23/03/2010 01:03
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more