2016-11-25 38 views
0

我有一个包含一些数字的文件,全部在一行中。我想读这个文件并把这一行放到一个字符串变量中。 因为它只包含一条线,getline()方法应该只能工作一次C++ std :: string是空的,但满''0'

但事实并非如此。它工作两次。我注意到,首先我的string_descriptor包含数字(所以它是okey),但在getline之后再占用另一行,这次它是空的,但通过查看调试器,字符串包含大量\ O \ 10次。

\O\O\O\O\O\O\O\O\O\O\O\O\O\O\O\ 

enter image description here

它困扰我,因为之后我做了一些处理,并因为我的应用程序crashs。

所以我在做什么是以下几点:

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()) 

我检查了我的文件,并没有在文件的结尾没有空间,所以据我所知。

谢谢您的帮助

+2

你不应该使用循环'EOF()'看起来更简单:https://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-错误 – Galik

+0

你的文件是否包含nul字符? – stark

+0

目前为止只有数字我知道 – lilouch

回答

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) 
+0

感谢修改,但即使以这种方式更改,但仍然得到相同的问题... – lilouch

+0

@lilouch也许该文件包含两个记录,最后一个是空的。问题是什么? –

+0

其实,我的文件只包含一行数字,我的行变量应该只包含数字,但似乎它再次循环,我从行中得到一个空字符串。我不想这样做,这就是为什么我使用IF条件......但我仍然得到一个空字符串,其中包含\ 0 \ – lilouch

相关问题