2013-12-13 44 views
11

我正在尝试编写一个函数,该函数能够检测到什么时候我几乎处于串流结束处,但似乎不起作用。在串流结束时检测

下面是一些代码:

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == path.length()) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 

我尝试使用ss.tellg()== path.length(),但是,这并不工作。有人有另一种选择吗?

+0

@戴夫这也不起作用。 – JNevens

回答

12

我想通了..

std::string path(1.2.3); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
    if (ss.peek() != '.') { 
     ss >> number; 
     if (ss.tellg() == -1) { 
      std::cout << "Last one: " << number; 
     } else { 
      std::cout << number; 
     } 
    } else { ss.get(); } 
} 
+0

嗯......你从来没有将一个值提取到'number'中,那么你为什么要打印它? – 0x499602D2

+2

简单地做'while(ss)'更好。 EOF只是您无法再阅读流的几个原因之一。 – pyon

+0

@EduardoLeón是对的。当“ss”错误时,意味着你不能再阅读了。然后调用's.eof()'来判断'文件结束'是否是你无法读取的原因。 – xuhdev

1
std::string path("1.2.3"); 
int number; 
std::stringstream ss(path); 
while (!ss.eof()) { 
if (ss.peek() != '.') { 
    ss >> number; 
    if (ss.tellg() == -1) { 
     std::cout << "Last one: " << number; 
    } else { 
     std::cout << number; 
    } 
} else { ss.get(); } 
}