C++中具有相同文本的读取文本文件中的不同输出
Different output in read text files that have same text in C++
我写了一个代码,它读取一个文本文件并通过在行尾添加"-"chracter来打印到stdout。我测试了两个不同的名称文件,它们具有相同的文本,但结果不同。我不明白。请有人解释一下。
我的代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
ifstream file (argv[1]);
string line;
if (file.is_open())
{
while ( getline (file,line) )
{
cout << line.c_str() << '-' << endl;
}
file.close();
}
return 0;
}
我用它运行这个命令:
./a.out test.txt
输出为:
Some text written-
More input to this file-
Data01323526-
AnotherData09142-
然后我用它运行这个命令:
./a.out pr.txt
最后一个命令的输出为:
-ome text written
-ore input to this file
-ata01323526
AnotherData09142-
"pr.txt"和"test.txt"具有相同的文本。您可以下载它们在那里进行测试:http://www.megafileupload.com/anP3/pr.txt
http://www.megafileupload.com/anP4/test.txt
它们具有相同的文本,包含 71 个字符。
Some text written
More input to this file
Data01323526
AnotherData09142
为什么输出不同?我如何读取输出始终相同?
test.txt
是一个Unix编码为71字节的文件。 在此编码下,换行符编码为 1 个字符:0x0A
(又名 'n'
)。
pr.txt
是一个dos/windows编码为74字节的文件。 它具有相同的文本内容,但换行符编码为 2 个字符:0x0D 0x0A
(又名 'r'
和 'n'
)。
如果你在 linux 下执行你的程序test.txt
一切都很好。
如果你在 pr.txt
上执行它,0x0A
被认为是每行的末尾,因此,您将在此位置之前添加"-"。 程序按设计工作,但0x0D
和0x0A
由破折号分隔。
但是,当您现在在 linux 下显示pr.txt
的结果时,当打印0x0D
时(这意味着控制台的"回车"),光标被放置在行的开头,并且"-"覆盖屏幕上的第一个字符。 所以文件的内容是正确的:只有显示很奇怪。
附加说明:
如果您在Windows下pr.txt
上执行相同的程序,您将获得正确的结果。 这是由于打开文件时的默认文本模式。 窗口上的文本模式将读取两个字符行分隔符0x0D 0x0A
,就好像它们是单个'n'
一样。然后,您将在它前面放置"-",当写回磁盘时,标准库会将'n'
解压缩到特定于平台的0x0D 0x0A
中。 即使在 linux 下显示结果,您也会看到正确的结果,因为"-"打印在行尾,因此"\r"不会造成可见的效果,因为它后面跟着 ly''。
回车符和行回车符是单独的字符。您确定两个文件中的行尾相同吗?也许尝试使用 vim 进行编辑并使用 set: list
- 如何让控制台输出覆盖控制台而不是纯文本输出?
- 如何清除文本输出?
- C++ 如何居中文本输出
- 如何将光标移动到 cin.clear() 和 cin.ignore() 之后的文本输出末尾?
- 期望文本输出而不是数字
- 如何将文本输出到另一个已打开C 的控制台
- 将文本输出到文本框C 中
- 将格式化文本输出到屏幕
- 从二进制文件中抓取文本时,为什么 xdg_vtnr=8 是我的结果
- 用C++排列文本输出
- 使用 std::ostream 方法将格式化文本输出到 std::string 对象
- 文本输出() - "invalid null pointer"
- 将文本输出到C++ Winform
- C++不会创建要将文本输出到的文件
- 是否有一种简洁的方法可以将文本输出到调试窗格
- 将.txt文件中的文本输出到c++控制台中
- 使用 ofstream 进行缓冲文本输出以获得性能
- 文本输出发送到文件,稍后在程序中使用.如何使用缓冲区
- 从Windows应用程序的文本框中抓取文本
- 是否有用于80列格式文本输出的库/方法