Replace tabs in input and variable vs symbolic parameter I am learning C and this is an exercise from The C Programmnig Languange by Brian and Ritchie.


  Write a program "detab" that replaces tabs in the input with the proper number of blanks to space to the next tab stop. Assume a fixed set of tab stops, say every \$n\$ columns. Should \$n\$ be a variable or a symbolic parameter?


Here's my try, and I've made \$n\$ a parameter. I would appreciate any feedback and explanation on symbolic parameter.

#include &lt;stdio.h&gt;

#define TABLENGTH 8

void detab(int n);

int main () {

  int c, noOfTabs;
  noOfTabs = 0;

  while ((c = getchar()) != EOF) {

    if (c == '\t') {
      ++noOfTabs;
    } else if (noOfTabs &gt; 0) {
      detab(noOfTabs);
      noOfTabs = 0;
      putchar(c);
    }

  }

  return 0;
}


void detab (int n) {

  while (n &gt; 0) {
    --n;
    int i;
    for (i = 0; i &lt; TABLENGTH; ++i) {
      putchar(' ');
    }
  }

}
The code is not ready for review, because it does not solve the exercise. It blindly replaces each tab with TABLENGTH spaces. This is not detabbing; the amount of blanks must give you a next tab stop. For example, for

a\tb
aa\tb
aaa\tb


the output should be

a       b
aa      b
aaa     b


(number of blanks is 7, 6, and 5 respectively, to align b at the tab stop, the 8th column). Your code produces

a        b
aa        b
aaa        b


instead.