大家帮我看下下面这个C程序

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:07:38
题目是这样的:编写程序detab, 将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止的地方。假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。
代码如下:
#include <stdio.h>
#define TABINC 8
int main(int argc, char *argv[])
{
int c , nb , pos ;
nb = 0 ;
pos = 1 ;
while ( ( c = getchar ( ) ) != EOF )
{
if ( c == '\t' )
{
nb = TABINC - ( pos - 1 ) % TABINC ;
while ( nb > 0 )
{
putchar (' ') ;
pos ++ ;
nb -- ;
}
}
else if ( c == '\n' )
{
putchar('\n') ;
pos = 1 ;
}
else putchar( c ) ;
pos ++ ;
}
return 0;
}
对于程序中的这句:nb = TABINC - ( pos - 1 ) % TABINC ;用来计算到达下一个制表位需要的空格数nb。我怎么计算nb都是等于TABINC啊?大家帮我指点下迷津啊!谢谢。
题目的答案中这样解释:我们假设每隔TABINC个位置就会出现一个制表位。这句话是什么意思啊?

不会呀。
有这一句。
else putchar( c ) ;
pos ++ ;
那么当c!='\n'并且c!='\t'时都会次pos加1的。
程序执行时,当你输入5个字符比如“abcde”后pos就等于6了,如果这时abcdef后面有一个'\t'的话,那么就会执行这一句nb = TABINC - ( pos - 1 ) % TABINC ;
这时nb不就等于3了。

不太明白你想说啥?
可以用以下你预想中程序该出现的内容来说明一下你的要求吗??