【发布时间】:2014-10-16 02:05:42
【问题描述】:
我正在自学 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