首页 > 解决方案 > C 代码不会用换行符打印整个段落

问题描述

这是我的 C 代码:

#include <stdio.h>

int main()
{
  int c = getchar();
  while (c != EOF) {
    if (c != '\n')
      putchar(c);
    else putchar(32);
    c = getchar();
    }
return 0;
}

我想制作一个程序,通过用\n空格替换字符来打印出带有换行符的段落。问题是,当我使用上面提供的代码时,它只打印出最后一行。

例如,对于文本:

This is
my
text

打印的结果是text。当我删除if(), else条件时,该段落被正确打印,并且只留下putchar(),而不尝试替换任何内容。

有什么问题?

标签: cchar

解决方案


您的输入文件有 CRLF 换行符。当你用空格替换 LF 时,你需要忽略 CR 字符。否则,打印 CR 字符将回到行首并覆盖已打印的内容。

#include <stdio.h>

int main()
{
    int c;
    while ((c = getchar()) != EOF) {
        if (c == '\n') {
            // replace newline with space
            putchar(' ');
        } else if (c == '\r') {
            // ignore CR
        } else {
            putchar(c);
        }
    }
    return 0;
}

推荐阅读