这个习题刚开始的时候还比较困惑,后来找到了计算制表符停止位的办法,又觉得还不算难吧。
#include <stdio.h>
#define TAB 8 /* 制表符相当于空格个数 */
/* 练习1-20 编写程序detab,将输入中的制表符替换成适当数目的空白符(使空白充满到下
一制表符停止位)。假定制表符停止位的位置是固定的,比如在每个n列的位置上。n应为
变量或符号参数吗?
*/
main()
{
int c, i, n; /* c用于接收输入字符,
i用于计数当前输入的字符实际占用了相当于多少字符的位置,
n是后面会用到的另一个计数 */
i = 0;
while ((c = getchar()) != EOF)
{
if (c != '\t') /* 不是制表符,照原样输出,计数器加1 */
{
printf("%c", c);
++i;
}
else /* 制表符 */
{
if(i % TAB == 0) /* 恰好位于制表符停止位 */
{
printf(" ");
i += TAB;
}
else /* 不是恰好在制表符停止位 */
{
for(n = 0; n < (TAB - i % TAB); ++n) /* 计算出差n个字符到达下一个制表符位置,用相应的n个空格代替 */
printf(" ");
i += (TAB - i % TAB);
}
}
}
}