title: K&R Exercise 2-3 "Hex to int converter" Problem
body: <p>The program I wrote works in demographics consisting of only single Hexadecimal values. (Probably not the most elegant solution, but I'm a new programmer)  My question is, how would I go about handling of multiple hexadecimal digits, such as 0xAF, or 0xFF, etc? I'm not exactly sure, and I've seemed  confuse myself greatly, in the attempt.  I'm not asking for someone to hold my hand, but to give me a tip where I've gone wrong in this code and thoughts on how to fix it.</p>
  
  <p>Thanks :)</p>
  
  <pre><code>/* Exercise 2-3.  Write the function htoi(s), which converts a string of
   * hexadecimal digits (including an optional 0x or 0X) into it's equivalent
   * integer value. The allowable digits are 0...9 - A...F and a...f.
   * 
   */
  
  #include &lt;stdio.h&gt;
  #include &lt;string.h&gt;
  
  #define NL '\n'
  #define MAX 24
  
  int htoi(char *hexd);
  
  int
  main(void)
  {
      char str[MAX] = {0};
      char hex[] = "0123456789ABCDEFabcdef\0";
      int c;
      int i;
      int x = 0;
  
      while((c = getchar()) != EOF) {
          for(i = 0; hex[i] != '\0'; i++) {
              if(c == hex[i])
                  str[x++] = c;
          }
          if(c == NL) {
              printf("%d\n", htoi(str));
              x = 0, i = x;
          }
      }
      return 0;
  }
  
  int
  htoi(char *hexd) 
  {
      int i;
      int n = 0;
  
      for(i = 0; isdigit(hexd[i]); i++)
          n = (16 * i) + (hexd[i] - '0');
      for(i = 0; isupper(hexd[i]); i++) /* Let's just deal with lowercase characters */
          hexd[i] = hexd[i] + 'a' - 'A';
      for(i = 0; islower(hexd[i]); i++) {
          hexd[i] = hexd[i] - 'a';
          n = (16 + i) + hexd[i] + 10;
          n = hexd[i] + 10;
      }
      return n;
  }
  </code></pre>