了解k& r中的entab示例代码

时间:2014-10-16 02:05:42

标签: c tabs modulo kernighan-and-ritchie entab-detab

我自学C并通过K& R工作。我正在做练习1-21:

  

编写一个程序entab,用最少数量的制表符和空格替换空白字符串,以实现相同的间距。使用与detab相同的制表位。

我在做这个练习时遇到了麻烦所以我在网上找到了一个解决方案,但我不明白。有人可以解释这段代码的工作原理吗?

#include<stdio.h>
#define TABINC 8

int main(void)
{
    int nb,nt,pos,c;

    nb = 0;
    nt = 0;

    for(pos=1;(c=getchar())!=EOF;++pos)
        if( c == ' ')
        {
            if((pos % TABINC) != 0)
                ++nb;
            else
            {
                nb = 0;
                ++nt;
            }
        }
        else 
        {
            for( ; nt > 0 ; --nt)
                putchar('\t');
            if( c == '\t')
                nb = 0;
            else
                for( ; nb > 0; --nb)
                    putchar(' ');

            putchar(c);

            if(c == '\n')
                pos = 0;
            else if ( c == '\t')
                pos = pos + ( TABINC - (pos -1) % TABINC) - 1;
        }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

代码是

  • '\t'的倍数位置(即标签的大小)处遇到空格()时,放置一个标签(TABINC)。

  • 遇到标签时,会重置空格数。这是为了更喜欢标签到达tabstop

说明: - *中显示的空格 - 标签显示在

column: 1 2 3 4 5 6 7 8 9 10
input : * * * * h e l * * w 
output:    <tab>hel<tab>*w  

在这个例子中,当在TABINC整数的每个列位置遇到一个空格,即4(在这种情况下),一个标签&#39; \ t&#39;插入。否则就是空间。

希望这会给你一些想法。