title: How would I change the code to allow for words from a text file to populate the tree instead of hardcoding words?
body: <p>I'm creating a Trie that reads from a "Dictonary.txt" and adds it to the tree. I would like to ask how to code a function that reads a text file and adds it to the tree. I haven't really found any tutorials that I could understand how to achieve this. </p>
  
  <p>I hope you can help me. I would also be happy with some useful links that step by step teach me how it could possibly be done.</p>
  
  <pre><code>// C implementation of search and insert operations
  // on Trie
  #include &lt;stdio.h&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;string.h&gt;
  #include &lt;stdbool.h&gt;
  
  #define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
  
  // Alphabet size (# of symbols)
  #define ALPHABET_SIZE (26)
  
  // Converts key current character into index
  // use only 'a' through 'z' and lower case
  #define CHAR_TO_INDEX(c) ((int)c - (int)'a')
  
  // trie node
  struct TrieNode
  {
      struct TrieNode *children[ALPHABET_SIZE];
  
      // isLeaf is true if the node represents
      // end of a word
      bool isLeaf;
  };
  
  // Returns new trie node (initialized to NULLs)
  struct TrieNode *getNode(void)
  {
      struct TrieNode *pNode = NULL;
  
      pNode = (struct TrieNode *)malloc(sizeof(struct TrieNode));
  
      if (pNode)
      {
          int i;
  
          pNode-&gt;isLeaf = false;
  
          for (i = 0; i &lt; ALPHABET_SIZE; i++)
          pNode-&gt;children[i] = NULL;
      }
  
      return pNode;
  }
  
  // If not present, inserts key into trie
  // If the key is prefix of trie node, just marks leaf node
  void insert(struct TrieNode *root, const char *key)
  {
      int level;
      int length = strlen(key);
      int index;
  
      struct TrieNode *pCrawl = root;
  
      for (level = 0; level &lt; length; level++)
      {
          index = CHAR_TO_INDEX(key[level]);
          if (!pCrawl-&gt;children[index])
              pCrawl-&gt;children[index] = getNode();
  
          pCrawl = pCrawl-&gt;children[index];
      }
  
      // mark last node as leaf
      pCrawl-&gt;isLeaf = true;
  }
  
  // Returns true if key presents in trie, else false
  bool search(struct TrieNode *root, const char *key)
  {
      int level;
      int length = strlen(key);
      int index;
      struct TrieNode *pCrawl = root;
  
      for (level = 0; level &lt; length; level++)
      {
          index = CHAR_TO_INDEX(key[level]);
  
          if (!pCrawl-&gt;children[index])
              return false;
  
          pCrawl = pCrawl-&gt;children[index];
      }
  
      return (pCrawl != NULL &amp;&amp; pCrawl-&gt;isLeaf);
  }
  
  // Driver
  int main()
  {
      // Input keys (use only 'a' through 'z' and lower case)
      char keys[][8] = {"the", "a", "there", "answer", "any",
                   "by", "bye", "their"};
  
      char output[][32] = {"Not present in trie", "Present in trie"};
  
  
      struct TrieNode *root = getNode();
  
      // Construct trie
      int i;
      for (i = 0; i &lt; ARRAY_SIZE(keys); i++)
          insert(root, keys[i]);
  
      // Search for different keys
      printf("%s --- %s\n", "the", output[search(root, "the")] );
      printf("%s --- %s\n", "these", output[search(root, "these")] );
      printf("%s --- %s\n", "their", output[search(root, "their")] );
      printf("%s --- %s\n", "thaw", output[search(root, "thaw")] );
  
      return 0;
  }
  </code></pre>