[英]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.