所以我有这个构造函数
A::A(std::istream& is)
{
if (validation(is))
{
std::string line[SIZE];
unsigned int i = 0;
while((std::getline (is, line[i])&& i < SIZE))
{
i++;
}
....
验证看起来像这样,它在线存储IS并进行一些测试并返回布尔值。
它工作正常,但是此构造函数中的第二条getline为空白(行中未存储任何内容)。
如果我注释掉验证,它就可以了。
所以我想这与getline和buffer有关。我尝试清除,但对流不满意。
如果有人猜测,谢谢!
主要
ifstream myfile("file.txt");
A a(myfile);
验证文件
bool validation(std::istream& is)
{
string line[SIZE];
unsigned int i = 0;
bool valide = false;
while((std::getline(is, line[i])&& i < SIZE))
{
i++;
}
....
最佳答案
如果validation
具有while((std::getline(p_is, line[i]) && i < SIZE))
循环,则它获得的那些行将从流中消失,并且getline
不会直接在A::A
中看到它们。因此,getline()
返回false
,并且您的while
循环退出,并且line[]
或之后的任何i
元素仍为空。
想要一个单独的验证函数是相对不寻常的……只是尝试读入将存储数据的变量,然后进行验证。
如果确定要单独进行验证,则可以在使用is.seekg(0)
进行验证(请参见here获取文档)之后,搜索文件的开头,甚至重新打开文件。
关于c++ - std::getline从istream转换为string []多次为空白,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22364799/