请教个getline读取文件的问题
我用getline读取dat文件的时候, 为什么一直退不出循环? 我代码是这样的:
BOOL GetIPS(std::ifstream& in, TiXmlDocument* xml_myDocument, TiXmlElement* xml_RootElement, std::tr1::unordered_set<std::string> & set)
{
std::string line = "";
while (std::getline(in, line) && !in.eof())
{
//std::cout << line << std::endl;
size_t pos = line.find("=");
if (pos == std::string::npos)
continue;
std::string sub_ips = line.substr(pos + 1, line.length() - pos - 1);
size_t begin_Pos = 0;
size_t found_Pos = 0;
size_t length = sub_ips.length();
while (found_Pos != std::string::npos)
{
found_Pos = sub_ips.find(";", begin_Pos, 1);
std::string ip = sub_ips.substr(begin_Pos, found_Pos - begin_Pos);
if(ip.compare("127.0.0.1") == 0)
continue;
std::cout << ip << std::endl;
set.insert(ip);
begin_Pos = found_Pos + 1;
found_Pos = sub_ips.find(";", begin_Pos, 1);
}
}
return TRUE;
}
BOOL GetIPS(std::ifstream& in, TiXmlDocument* xml_myDocument, TiXmlElement* xml_RootElement, std::tr1::unordered_set<std::string> & set)
{
std::string line = "";
while (std::getline(in, line) && !in.eof())
{
//std::cout << line << std::endl;
size_t pos = line.find("=");
if (pos == std::string::npos)
continue;
std::string sub_ips = line.substr(pos + 1, line.length() - pos - 1);
size_t begin_Pos = 0;
size_t found_Pos = 0;
size_t length = sub_ips.length();
while (found_Pos != std::string::npos)
{
found_Pos = sub_ips.find(";", begin_Pos, 1);
std::string ip = sub_ips.substr(begin_Pos, found_Pos - begin_Pos);
if(ip.compare("127.0.0.1") == 0)
continue;
std::cout << ip << std::endl;
set.insert(ip);
begin_Pos = found_Pos + 1;
found_Pos = sub_ips.find(";", begin_Pos, 1);
}
}
return TRUE;
}
...全文
相关推荐
使用ifstream和getline读取文件内容[c++]
如果没有成功,它将打印错误信息并退出程序,这有助于在运行时发现和报告问题。在`main`函数中,我们依次调用了上述四个函数,演示了不同的文件读取策略。
C++中getline()的用法详解
确保分配足够的空间以防止这种问题。3. **读取效率**: `getline()`通常比`cin`更高效,因为它不会在遇到空格或制表符时停止读取。4.
getline 模板函数读取遇到分隔符后的多余的字符.pdf
关于getline模板函数读取遇到分隔符后的多余字符的问题,首先需要了解getline函数的用法以及它在读取输入时的行为。
cin.get()、cin.getline()、getline()、gets()、getchar()
3. getline()函数:getline()函数有两个版本,一个是标准库中的getline(),它属于std命名空间,需要包含头文件<string>;另一个是旧的C风格的getline(),它通常在包含
getline()返回值解析[项目源码]
为了解决这一问题,开发者需要在循环体内增加额外的逻辑判断,用来检查每次读取后得到的字符串是否为空,从而决定是否继续执行循环或者跳出循环。


