编写程序~把输入中的制表符替换成星号 ~ 的疑惑,求解~
程序代码是这样的~
程序代码:/* 把输入字符串中的制表符替换为*号 */
/*
* 原始练习题目:
* 编写程序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编辑过]







