编写程序~把输入中的制表符替换成星号 ~ 的疑惑,求解~
程序代码是这样的~程序代码:
/* 把输入字符串中的制表符替换为*号 */ /* * 原始练习题目: * 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方 * 假设制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。 * n应该昨晚变量还是符合常量呢? */ #include <stdio.h> #define TAB 8 int jis(int i, int tab); int main(void) { int pos, c, x; pos = 0; /* 记录当前所在列 */ while ( (c=getchar()) != EOF ) { //++pos; /* 为啥,把记录列数的表达式放这就会出错,逻辑上讲每录入一个字符就加1和放在后面没有什么区别 */ if(c == '\t') { x = jis(pos, TAB); while( x > 0) { putchar('*'); ++pos; /* 在每次输出后增加列数就正确了 */ --x; } } else { putchar(c); ++pos; /* 要把表达式放这,否则会出现错误~我也不理解 */ } } } /* 计算当前列离下一个tab还有几列 */ int jis(int i, int tab) { int x; if (i < tab) { x = tab - i; } else if (i > tab) { x = i % tab; x = tab - x; } return x; }
疑惑:
为啥,不可以在录入字符后就给变量自加1,在哪里自加1,程序输出的星号就对不上?
[此贴子已经被作者于2016-8-3 18:22编辑过]