c - 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;
}
推荐阅读
- r - 有没有办法将几个 excel 文件从 Dropbox 文件夹加载到 R-shiny 应用程序中?
- javascript - 如何在单个标记 vue 传单上使用两个标记道具
- php - (HY000/2002): 无法连接,因为目标机器主动拒绝
- ios - 从核心数据中获取子数
- rust - 为什么 Weak 没有自动取消引用
? - c++ - 如何在 C++ 中发送值而不是引用
- c# - UWP - 缓存本地视频
- python-3.x - 如何使用带参数的python装饰器?
- python - 解释 Numpy-Array 中的特定位
- python - Python Regex:多个“开始”术语,但它应该只匹配“结束”术语之前的最后一个“开始”术语