关于制表符和停止位的小程序习题有关问题,为什么总多一个空格呢

关于制表符和停止位的小程序习题问题,为什么总多一个空格呢

  代码在下面,我设置的条件语句是pos等于8,输入的空格数大于0,pos大于0时,那是linux的一个制表符停止位,就把空格计数变量nb清空,pos清空,制表符执行一次。运行程序后

123456789 格式位
  8 输入7个空格,一个数字8
  8 程序执行一次输入制表符,然后打印字母。

  
  我纠结的是为什么输入7个空格,当pos等于7时,就返回制表符了,明明我设置的是pos必须是8,才要返回制表符的。哪地方我错误了,请高人指点下。

  还有个问题就是这个程序在‘\n’上的处理是错误的,谁能帮忙修改下\n那段正确的代码。

  感激不尽。

C/C++ code
int main()
{
       int c, nb, pos;

      nb = 0;


      for (pos = 1; (c = getchar()) != EOF; ++pos){
        if (c == ' '){
                  ++nb;
           if (pos % TABINC == 0 && nb > 0 && pos > 0){     /*这块没怎么弄明白,明明是\t是8位的,或者说pos为什么不能从1开始记*/


                 putchar ('\t');
                 pos = 1;

                 nb = 0;

               }
            }
     else if (c == '\t') {
               putchar('\t');
               pos = 1;
               nb = 0;

            }

     else if (c == '\n') {
               if (nb > 0)
               putchar('\t');
               putchar('\n');
              nb = 0;
              pos = 1;

            }
     else {



            for (; nb > 0;--nb)

            putchar(' ');


            putchar(c);

           }

}
 return 0;
}


------解决方案--------------------
1,9,17,25,...