我有一个包含一些数字的文件,全部在一行中。我想读取此文件并将此行放入字符串变量。
因为它只包含一行,getline()
方法只能运行一次
但事实并非如此。它工作两次。我注意到我的string_descriptor首先包含了这个数字(所以它是okey)但是在getline之后需要另一行,这次它是空的但是通过查看调试器,字符串包含很多\ O \ like 10次。
\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\
这让我感到困扰,因为在我做了一些处理后,我的应用程序崩溃了。
所以我正在做的是:
fs.open (desc.c_str (), std::ios::in);
string line;
if(!fs.is_open())
{
cout<<"\n Cannot open the text.txt file";
}
else
{
std::string string_descriptor;
while (!fs.eof ())
{
getline( fs , line);
if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())
{
string_descriptor = line;
std::cout << "String descriptor : " << string_descriptor << std::endl;
}
}
}
为什么会这样?特别是我该如何处理?我尝试通过执行以下操作来解决这个问题,但它仍然是相同的:
if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())
我检查了我的文件,文件末尾没有空格,到目前为止我知道。
感谢您的帮助
答案 0 :(得分:1)
为了避免循环的第二次迭代,改变循环
while (!fs.eof ())
{
getline( fs , line);
//...
以下方式
while ( getline( fs , line) )
{
//...
也是这种情况
if (line != "" && line.find_first_not_of(' ') != std::string::npos && !line.empty())
看起来更简单
if ( line.find_first_not_of(' ') != std::string::npos )