C 理解EOF和break

C 理解EOF和break,c,break,C,Break,我正在尝试编写一个程序,用单个选项卡替换一个或多个选项卡的字符串 以下是我写的: #include <stdio.h> #include <stdlib.h> int main() { int c; while ((c = getchar()) != '\n') { if (c == 9) { while((c=getchar())== 9) putchar(

我正在尝试编写一个程序,用单个选项卡替换一个或多个选项卡的字符串

以下是我写的:

#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);
    }
}
#包括
#包括
int main()
{
INTC;
而((c=getchar())!='\n')
{
如果(c==9)
{
而((c=getchar())==9)
putchar(“”);
如果(c!=9)
打破
}
普查尔(c);
}
}
我把它和新行比较,因为我没有EOF,按ctrl-z什么都不做,至少在Windows上是这样。
输出打印的是空格而不是制表符。有人能指出我做错了什么吗?

事实上,当你在
中为
/
使用
break
时,如果你退出循环(不是你想要的),如果你想只允许一个制表符使用哨兵,如果前一个字符也是制表符,则继续使用

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个空格

欢迎来到堆栈溢出!听起来您可能需要学习如何使用a来逐步完成代码。有了一个好的调试器,您可以逐行执行您的程序,并查看它偏离预期的地方。这是一个必要的工具,如果你要做任何编程。进一步阅读:.
putchar('\t')?您是否在问如何使用ctrl-z之类的键来打破while循环?或者关于替换字符串中的制表符-您似乎正在工作,请阅读。修复算法中的逻辑错误是开发人员在调试会话中的工作,而不是SO问题的主题。