简单的C++文件I/O问题
Simple C++ File I/O issue
我已经有一段时间没有在C++中使用文件I/O了(通常只是C++),但我最近决定用它为朋友制作一个小型控制台项目。我的问题是,我在字符串数组和文件I/O方面遇到了一些问题(我不确定是哪个导致了问题)。我的代码如下(ReadPSWDS是一个ifstream):
int i = 0;
string str[200];
ReadPSWDS.clear();
ReadPSWDS.open("myPasswords.DoNotOpen");
if(ReadPSWDS.is_open())
{
while(!ReadPSWDS.eof())
{
getline(ReadPSWDS, str[i]); //Store the line
if(str[i].length()<1 || str[i] == "")
{
//Ignore the line if it's nothing
}
else
{
i++; //Move onto the next 'cell' in the array
}
}
}
ReadPSWDS.close();
我的问题是,在测试这一点时,字符串数组将显示为空(在将所有这些行写入文件时,文件将如预期的那样为空)。为什么字符串数组是空的,而没有填充文本文件的相应行?
问候,
Joe
您编写的循环显然是错误的:您之前正在测试eof()
失败,并且在getline
之后不测试失败。C++I/O无法预测。(我不可能,因为无论你在eof()
取决于你想读什么。)正确的模式是:
while ( i < size(str) && getline( readSWDS, str[i] ) ) {
if ( !str[i].empty() ) {
++ i;
}
请注意,我添加了一个针对i
的测试。如所写,如果您的文件包含200多条线路,你就麻烦大了。
然而,我不确定这是否是你的问题;循环写它通常只会在最后一行引起问题。(通常,如果最后一行以'n'
结尾,并且不为空,则将在您的数组中出现两次。)当然,除非你的文件包含200多行。
我可以补充一点,一个更典型的习惯用法是使str
std::vector<std::string>
,并写入循环:
std::string line;
while ( std::getline( readSWDS, line ) ) {
if ( !line.empty() ) {
str.push_back(line);
}
}
这避免了必须定义固定的最大行数。
相关文章:
- 使用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文件时出现问题;文件结束时间早于预期