了解EOF并打破

时间:2017-02-22 09:22:06

标签: c break

我正在尝试编写一个程序,用一个标签替换一个或多个标签的字符串。

这是我写的:

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

int main()
{
    int c;
    while ((c = getchar()) != '\n')
    {
        if (c == 9)
        {
            while((c=getchar())== 9)
                putchar('   ');
            if (c != 9)
                break;
        }
        putchar(c);
    }
}

我将它与换行符进行比较,因为我没有得到EOF并且按下ctrl-z什么都不做,至少在Windows上。 那么输出打印空格而不是制表符。有人可以指出我做错了什么吗?

2 个答案:

答案 0 :(得分:2)

事实上,当您在break / break内部使用for退出循环(不是您想要的)时,无需while,如果你想只允许一个标签使用标记和continue如果前一个字符也是一个标签:

int c, tab = 0;

while (((c = getchar()) != '\n') && (c != EOF))  {
    if (c == '\t') {
        if (tab == 1) continue;
        tab = 1;
    } else {
        tab = 0;
    }
    putchar(c);
}

按CTRL + Z +简介在Windows中发送EOF

答案 1 :(得分:1)

因为你写了putchar(' ')

是一个错误。改为写putchar('\t')

没有' '这样的字符。这是4个空格。