【问题标题】:rewinding stream with seekg() C++使用 seekg() C++ 倒带流
【发布时间】:2017-09-10 03:21:14
【问题描述】:

我是 C++ 新手。这是实际运行的程序的一部分,没有内存泄漏。它读取一行,计算每行有多少双精度(aux_d),如果它等于暗淡(尺寸),它就 push_back 到向量中。

读取行,然后倒回 istringstream fss。但是当我打印我的 v_db[i] (vector_database) 时,它只会将零加载到坐标类中。

coordinates aux_c;
double aux_d;

...做一些事情然后

while(std::getline(filestream,line)){
    i=0;
    std::istringstream fss(line);
    while( fss >> aux_d )
        i++;
    if (i != dim){
        std::cerr << "Wrong Tiberium_Base coordinates // "
                  << "Check line -"
                  << lc
                  << "-"
                  << std::endl;
        lc++;          
        continue;
    } 
    fss.seekg(0);
    fss >> aux_c;
    v_db.push_back(aux_c);
    lc++; 
}

所以我这样做只是为了让它工作。

    std::istringstream fss2(line);
    fss2 >> aux_c;
    v_db.push_back(aux_c);
    lc++; 

我想知道这到底是怎么回事,因为我以前用过 seekg 也有同样的目的,而且根本没有任何问题(实际上是在这个程序中)。谢谢。

【问题讨论】:

  • fss 设置了failbit (这就是您摆脱while( fss &gt;&gt; aux_d ) 循环的方式)。只要设置了该位,所有后续调用都会立即失败。

标签: c++ seekg


【解决方案1】:

在你完成循环之后。

while( fss >> aux_d )
    i++;

fss 设置了failbit。您需要先清除它,然后才能使用流。

while( fss >> aux_d )
    i++;

...

// Clear the error states of the stream.
fss.clear();

fss.seekg(0);
fss >> aux_c;

【讨论】:

  • 哦,太好了,非常感谢。就这么简单。再次感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2014-03-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多