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()而不尝试替换任何内容时,该段落将正确打印。

出什么问题了?

解决方法

您的输入文件包含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;
}