Чтение строки из текстового файла для построения бинарного дерева поиска

голоса
-1

Вот мой код до сих пор

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>

#define lineSize 256

struct recordNode {
   char district[256];
   int employees;
   int employers;
   int students;
   int retried;
   int others;
   struct recordNode* left;
   struct recordNode* right;
};

struct stockNode* addRecord(struct recordNode* tree, struct recordNode node) {
   struct recordNode* newnode;
   struct recordNode* searcher;

   /* allocate memory block and assign parameter values to it */
   newnode = (struct recordNode*)malloc(sizeof(struct recordNode));

   newnode->left = NULL;
   newnode->right = NULL;
   /* check if the tree is empty, and in such case, return the newnode as*/
   /* the first node of the tree */
   if (tree == NULL)
     return newnode;
   /* searcher is the pointer to search for the correct location for insertion */
     searcher = tree;
   while (1) {
   /* see if the newnode should go to left branch */
      //if (code < searcher->code) {
      if (strcmp(tree->district, node.district) < 0) {
      /* yes, and if the left branch is empty, this is the insertion location */
         if (searcher->left == NULL) {
            searcher->left = newnode;
            return tree;
         }
      else { /* not yet, keep moving to the next level down */
         searcher = searcher->left;
         continue;
      }
   }
   /* see if the newnode should go to right branch */
      if (strcmp(tree->district, node.district) > 0) {
   /* yes, and if the right branch is empty, this is the insertion location */
         if (searcher->right == NULL) {
            searcher->right = newnode;
            return tree;
         }
      else { /* not yet, keep moving to the next level down */
        searcher = searcher->right;
        continue;
      }
   }
   else {
      free(newnode);
      return NULL; /* an error indication */
   }
   }
}

void getFile () {
   struct recordNode node;
   struct recordNode *tree;

   FILE* fpin;
   FILE* fpout;

   char line_buffer[lineSize]; /* BUFSIZ is defined if you include stdio.h */
   int counter = 0;

   //file validation
   fpin=fopen(testData.txt, r);

   if (fpin == NULL ) exit(0);
        counter = 0;
    while (fgets(line_buffer, sizeof(line_buffer), fpin)) { 
               counter++;
               if (counter != 1) {
               sscanf(line_buffer, %[^','],%d,%d,%d,%d, node.district, &node.employees, &node.students, &node.retried, &node.others);
               tree = addRecord(tree, node); **//ERROR**

               }

    }
        getchar();

}

void main() {

   getFile();
   getchar();

}

Следующая строка:

tree = addRecord(tree, node);

Дает эту ошибку:

// ОШИБКА Проект Project2.exe поднял исключение класса EAccessViolation с нарушением доступа сообщение»по адресу 32657E39. Читайте по адресу 00000001' . Процесс остановлен. Используйте шаг или Run , чтобы продолжить

Как я могу решить эту проблему?

Задан 08/06/2011 в 06:20
источник пользователем
На других языках...                            


1 ответов

голоса
1

Убедитесь в том, чтобы назначить * указатель на NULL дерева при создании. В противном случае это может быть какое-либо значение.

 void getFile () {
       struct recordNode node;
       struct recordNode *tree=NULL;
       ...
Ответил 08/06/2011 в 06:49
источник пользователем

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