簡體   English   中英

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

[英]understanding entab example code in k&r

我正在自學C,並通過K&R工作。 我正在做練習1-21:

編寫一個程序entab,用最少數量的制表符和空格替換空格,以達到相同的間距。 使用與取消制表相同的制表位。

我在進行此練習時遇到了麻煩,因此我在網上找到了解決方案,但我不理解。 有人可以解釋此代碼的工作原理嗎?

#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;
}

該代碼是

  • 空格()時放一個制表符( '\\t' )的位置是TABINC ,即選項卡的大小。

  • 遇到制表符時,將重置空格數。 這是希望使用標簽頁來達到制表位

為了說明:-在*中顯示一個空格-在中顯示一個標簽

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

在此示例中,當在每個列位置都遇到可由TABINC整除的TABINC (即4)(在這種情況下)時,將插入選項卡'\\ t'。 否則空間。

希望這會給您一些想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM