了解 EOF 和中断

Understanding EOF and 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 上。 那么输出打印空格而不是制表符。有人可以指出我做错了什么吗?

不需要break,事实上,当你在for/while中使用break时,你退出了循环(不是你想要的), 如果你想只允许一个制表符使用一个标记和 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 + Intro 在 Windows 中发送 EOF

因为你写了 putchar(' ').

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

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