使用getline() c++读取文件时出现问题
Trouble reading from file using getline() c++
这段代码总是打印文件的最后一行。我希望它打印文件中的所有文本,每次一行。知道为什么不行吗?
string filename;
cout << "File to read: ";
cin >> filename;
ifstream afile;
afile.open(filename.c_str());
string line;
while(!afile.eof()) {
getline(afile, line);
cout << line;
}
afile.close();
用这种方法做同样的事情:
for (string line; getline(afile, line);) {
cout << line;
}
也许是我的终端出了问题?这工作…
for (string line; getline(afile, line);) {
cout << line << endl;
}
问题是只打印最后一行。正确吗?
- 我建议您在while循环中添加
std::endl
。它可以使问题更清楚。有时输出可能会令人困惑。 - 您还可以检查输入文件中的行分隔符。
'n'
是getline
的默认分隔符。如果使用其他字符,则将其指定为getline
的第三个参数。
From cplusplus.com:
如果找到分隔符,则将其提取并丢弃,即为不存储,下一个输入操作将在它之后开始。
由于您的原始代码片段本身没有插入任何额外的换行符,因此没有任何东西使输出到终端的内容转到下一行。当输出耗尽水平空间时,接下来发生的是终端。我不确定您使用的是什么终端,但在您的情况下,它只是将光标包装回该行上的第一个字符而不换行。在windows命令shell中,它只是换行到下一行。
还要注意:
while(!afile.eof()) {
getline(afile, line);
cout << line;
}
是一个常见的反模式。如前所述,更合适的格式是:
while(getline(afile, line)) {
cout << line << 'n';
}
文件流只有在到达eof并尝试从中读取时才会变为false
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 使用 seekg() 读取C++中的文件时出现问题
- sqlite3 和生成文件中的链接出现问题
- C++头文件和类实现出现问题
- 用户输入字符串的文件附加问题..C++
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- 读取文件并将其存储在unordered_map中时出现问题
- 编译 llvm 插件时出现问题:llvm/Config/llvm-config.h:没有这样的文件或目录
- 我在使用C++文件时遇到了一些问题
- 在Linux上使用Clang / OLLVM交叉编译helloworld Windows可执行文件时的问题
- 将文件复制到自定义位置,存在字符串转换问题
- DirectX12 的问题:"d3dApp.h":没有这样的文件或目录
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 读取制表符分隔的文件时出现问题 C++
- 当我在 CLion 中读取数组中的 txt 文件时C++编码问题
- 使用 RapidXML 解析大型 XML(大小大于 65 KB)文件时出现问题
- C++:读取.BMP文件时出现问题;文件结束时间早于预期