当我输入2个或更多连续选项卡时,为什么我的C程序用适当数量的空格替换选项卡

时间:2017-04-19 04:28:49

标签: c

如果我输入一个标签,则间距是正确的,那么当我在文本之间输入连续的标签时,为什么它会给出较少的空格?

/**********************************************************
 * Replaces TABs with an appropriate number of spaces *
 *                                                                                                  *
 **********************************************************/

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        int ch;
    int i=0;
    while((ch=getchar()) !=EOF)
    {
        if(ch=='\t')
        {
            for(i=0;i<4;i++)
                putchar(' ');
        }
        else
                putchar(ch);
    }
    return 0;
}
 ![enter image description here](https://i.stack.imgur.com/hyA10.jpg)

2 个答案:

答案 0 :(得分:0)

你的程序运行正常。

最有可能(就像在我的系统上一样),选项卡在控制台上的表示大于4个空格(在我的标签上,标签大8个空格)。在这种情况下,您的输出可能看起来比输入短:

->      leading tab, as large as 8 spaces
....converted to four spaces

当然,这不会总是适用,因为标签有固定的位置(第一行显示标签将放置后续字符的位置):

********++++++++********+++++++
hello-> world
hello....world (not shortened this time)

********++++++++********+++++++
hello-> ->      world (consecutive tabs again)
hello........world

答案 1 :(得分:0)

如果使用空格扩展到下一个制表位,那就更好了。

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    int ch;
    int i=0,col=0;

    while((ch=getchar()) !=EOF) {
        if(ch=='\t') {
            for(i=0;i<4;i++) {
                putchar(' ');
                col++;
                if((col%4)==0) break;
            }
        }
        else {
            putchar(ch);
            if(ch=='\n' || ch=='\r') col=0;
            else col++;
        }
    }
    return 0;
}