关于制表符和停止位的小程序习题有关问题,为什么总多一个空格呢
关于制表符和停止位的小程序习题问题,为什么总多一个空格呢
代码在下面,我设置的条件语句是pos等于8,输入的空格数大于0,pos大于0时,那是linux的一个制表符停止位,就把空格计数变量nb清空,pos清空,制表符执行一次。运行程序后
123456789 格式位
8 输入7个空格,一个数字8
8 程序执行一次输入制表符,然后打印字母。
我纠结的是为什么输入7个空格,当pos等于7时,就返回制表符了,明明我设置的是pos必须是8,才要返回制表符的。哪地方我错误了,请高人指点下。
还有个问题就是这个程序在‘\n’上的处理是错误的,谁能帮忙修改下\n那段正确的代码。
感激不尽。
------解决方案--------------------
1,9,17,25,...
代码在下面,我设置的条件语句是pos等于8,输入的空格数大于0,pos大于0时,那是linux的一个制表符停止位,就把空格计数变量nb清空,pos清空,制表符执行一次。运行程序后
123456789 格式位
8 输入7个空格,一个数字8
8 程序执行一次输入制表符,然后打印字母。
我纠结的是为什么输入7个空格,当pos等于7时,就返回制表符了,明明我设置的是pos必须是8,才要返回制表符的。哪地方我错误了,请高人指点下。
还有个问题就是这个程序在‘\n’上的处理是错误的,谁能帮忙修改下\n那段正确的代码。
感激不尽。
- C/C++ code
int main() { int c, nb, pos; nb = 0; for (pos = 1; (c = getchar()) != EOF; ++pos){ if (c == ' '){ ++nb; if (pos % TABINC == 0 && nb > 0 && pos > 0){ /*这块没怎么弄明白,明明是\t是8位的,或者说pos为什么不能从1开始记*/ putchar ('\t'); pos = 1; nb = 0; } } else if (c == '\t') { putchar('\t'); pos = 1; nb = 0; } else if (c == '\n') { if (nb > 0) putchar('\t'); putchar('\n'); nb = 0; pos = 1; } else { for (; nb > 0;--nb) putchar(' '); putchar(c); } } return 0; }
------解决方案--------------------
1,9,17,25,...