【发布时间】:2014-10-14 07:16:14
【问题描述】:
我正在自学 C 并通过 K&R 工作。我正在做练习 1-20:
编写一个程序entab,用最少数量的制表符和空格替换空格字符串,以实现相同的间距。使用与 detab 相同的制表位。
我自己完成了这个程序,但正在审查其他解决方案:
#include<stdio.h>
#define TABINC 8
int main(void)
{
int nb,pos,c;
nb = 0;
pos = 1;
while((c=getchar())!=EOF)
{
if( c == '\t')
{
nb = TABINC - (( pos - 1) % TABINC); // <---- How does this work
while( nb > 0)
{
putchar('#');
++pos;
--nb;
}
}
else if( c == '\n')
{
putchar(c);
pos = 1;
}
else
{
putchar(c);
++pos;
}
}
return 0;
}
我很难理解这部分的工作原理nb = TABINC - (( pos - 1) % TABINC);。有人可以逐步解释这到底在做什么吗?或许可以给我举个例子?
谢谢。
【问题讨论】:
标签: c tabs modulo kernighan-and-ritchie entab-detab