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

问题描述 投票:0回答:1

我正在教自己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;
}
c tabs modulo kernighan-and-ritchie entab-detab
1个回答
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(在这种情况下),插入一个标签'\ t'。否则空间。

希望这会给你一些想法。

© www.soinside.com 2019 - 2024. All rights reserved.