Getline由于某种原因不起作用

时间:2013-12-10 13:19:22

标签: c++ getline stringstream

map - 是我打开的文件。 line - string

上半部分有效,但下半部分没有。

    getline(map, line);
    getline(ssvalues, values, '|'); // Gets the name of the tileset file
    tileset.loadFromFile(values.c_str());
    getline(ssvalues, values, ' '); // Gets the size of the tile
    tileSize = atoi(values.c_str());

    getline(map, line); // Reads the next line.
    ssvalues.str(line);

    values = "";

    // FROM HERE IT DOESNT WORK, 'values' always empty, why--
    getline(ssvalues, values, '|'); // Get the X size of map
    std::cout<<values;
    mapSize.x = atoi(values.c_str());
    getline(ssvalues, values, ' '); // Get the Y size of map
    mapSize.y = atoi(values.c_str());
    std::cout<<values;

我正在阅读的文件内容是:

tileset.png|32
1200|1200

1 个答案:

答案 0 :(得分:2)

ssvalues.str(line);

这里你重置了stringstream缓冲区的“内容”,但你没有清除它的错误标志。由于它已经达到EOF,因此该标志仍然设置,未来的getline调用将失败。

您应该在代码中为所有这些输入操作添加错误检查,并编写以下内容而不是上述内容:

ssvalues.clear();
ssvalues.str(line);