【问题标题】:std::getline from istream into string[] multiple times blankstd::getline 从 istream 到 string[] 多次空白
【发布时间】:2014-04-17 08:54:43
【问题描述】:

所以我有这个构造函数

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

验证.cpp

bool validation(std::istream& is)
{
string line[SIZE];
unsigned int i = 0;

bool valide = false;

while((std::getline(is, line[i])&& i < SIZE))
{
    i++;
}
....

【问题讨论】:

    标签: c++ file buffer getline istream


    【解决方案1】:

    如果validation 有一个while((std::getline(p_is, line[i]) &amp;&amp; i &lt; SIZE)) 循环,则它得到的那些行将从流中消失,并且getline 不会直接在A::A 中看到。因此,getline() 返回false 并且您的while 循环退出,并且i 或超出i 的任何line[] 元素仍将为空。

    想要一个单独的验证函数是相对不寻常的......只需尝试读入将存储数据的变量,随时验证。

    如果您决定单独进行验证,您可以在使用is.seekg(0) 进行验证后查找文件的开头(有关文档,请参阅here),甚至可以重新打开文件..

    【讨论】:

    • 感谢您的快速回答!
    猜你喜欢
    • 2010-12-21
    • 2020-10-21
    • 2015-06-01
    • 2012-11-30
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多