【发布时间】:2021-04-03 03:22:00
【问题描述】:
我正在编写一个函数来读取文件并显示除空行之外的每一行。但是,当我试图避免出现空行时,显示仍然包括每个空行。我的代码有什么问题?
ifstream rfile;
int lineNum{};
rfile.open(inputFilePath);
for (string line; getline(rfile, line);) {
lineNum++;
if (line.empty())
cerr << "Line " << lineNum << " is empty." << '\n';
else
cout << lineNum << ": " << line << '\n';
}
输入文件包含:
10* 8
44 - 88
12 + 132
70 / 7
有 3 个新行。但我的输出是:
1:
2:
3: 10* 8
4: 44 - 88
5: 12 + 132
6: 70 / 7
7:
为什么新行还在显示?
正如@prehistoricpenguin 所说,我刚刚更改了cout << lineNum << ": " << line << '\n'; into cout << lineNum << ": " << line << ":" << line.length() << '\n';。
然后输出变成了:
:1
:1
:6
:8
:9
:7
:1
另外,我打开了“show whitesapce”。在我的输入文件中,它没有显示点或空格。然而,在运行程序时,会显示点(空白)。
【问题讨论】:
-
输入文件是否包含
\r\n行尾? -
@Elijay 文件不包含 \r\n。我只是通过点击“enter”来添加新行来测试功能。
-
把
cout << lineNum << ": " << line << '\n';这一行改成cout << lineNum << ": " << line << ":" << line.length() << '\n';,就可以看到长度了 -
这可能是一些跨平台问题造成的,比如说你在Windows上创建了输入文件,但是你的程序是在Linux上运行的。
-
尝试在您选择的编辑器中打开
Show whitespace,看看这些行是否实际上是空白的。