Невозможно распечатать содержимое одного связанного списка строк - PullRequest
0 голосов
/ 07 января 2011

Я написал этот фрагмент кода здесь, и я связал его с несколькими другими функциями и основной, и он работает без проблем и компилируется без предупреждений (я использую компилятор gcc).* Я использую массив указателей (archive.products []) в качестве точки входа в несколько списков строк.Я все еще в начале, поэтому списки имеют только один узел каждый.

Проблема, с которой я столкнулся, заключается в том, что я не могу заставить функцию lprintf показывать на экране компоненты одноузловых списков строк, которые я создал.Обратите внимание, что printf, расположенный внутри функции push, печатает нормально.Так что я знаю, что толчок делает свое дело ...

Если кто-нибудь имеет представление о том, что я могу делать неправильно, напишите ответ ниже.Заранее спасибо!

#define line_length 61
#define max_products 10

struct terminal_list {
  char terminal[line_length];
  struct terminal_list *next;
}*newnode, *browser;
typedef struct terminal_list tlst;

struct hilevel_data {
 char category[line_length];
 tlst *products[max_products];
};
typedef struct hilevel_data hld;

void import_terms(FILE *fp, hld archive){
  char buffer[line_length];
  char filter_t[3] = "}\n";
  int i = 0, j = 0;

  while (!feof(fp)) {    
    fgets(buffer, line_length, fp);
    if (strcmp(buffer, filter_t) == 0) {
      return;
    }

    head_initiator(archive, i);
    push(buffer,archive, i);

    lprintf();

    i++;
  }
}

void head_initiator(hld archive, int i){
  browser = NULL;
  archive.products[i] = NULL;
}

void push(char buffer[],hld archive, int i){
 newnode = (tlst *)malloc(sizeof(tlst));
 strcpy(newnode->terminal, buffer);
//  printf("%s", newnode->terminal);
 archive.products[i] = browser;
 newnode->next = browser;
 browser = newnode;
}

void lprintf(){
  tlst *p;
  p = browser;
  if (p = NULL){
    printf("empty\n");    
  }
  while(p!=NULL){
    printf("%s\n", p->terminal);
    p=p->next;
  }
}

Ответы [ 2 ]

1 голос
/ 07 января 2011

Вкл .: void lprintf()

if (p = NULL)

должно быть

if (p == NULL)
1 голос
/ 07 января 2011
if (p = NULL){
    printf("empty\n");    
}

Я думаю, вы имеете в виду

if (p == NULL){
    printf("empty\n");    
}

Вы фактически очищаете список с помощью p = NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...