问题描述
这是我的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;
}