Как сохранить буфер std :: cin после использования std :: cin.getline () - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь перечитать буфер cin после использования cin.getline () 5 раз, вызвав cin.seekg (), но после повторного вызова cin.getline () вместо повторного чтения данных изtop, str становится пустой строкой.Cin.getline () очищает буфер?Если так, как я могу остановить это?

#define PATH_MAX 512
using std::cin;

int main()
{
    char* str = new char[PATH_MAX + 1];

    for(int i = 0; i < 5; i++)
        cin.getline(str, PATH_MAX);

    cin.seekg(cin.beg);

    while(true)
        cin.getline(str, PATH_MAX);

    return 0;
}

1 Ответ

0 голосов
/ 25 ноября 2018

Я пытаюсь перечитать буфер cin после использования cin.getline() 5 раз

Это невозможно с cin, вводом с терминала соответственно.

Что вы можете сделать, так это самостоятельно отслеживать вводимые данные, используя std::vector<std::string>, сохраняя эти строки на первом месте.Вот примерный набросок:

#include <iostream>
#include <string>
#include <vector>    
using std::cin;
using std::string;

int main()
{
    std::vector<string> lines;
    string line;
    for(int i = 0; i < 5; i++) {
        std::getline(cin,line);
        lines.push_back(line);
    }

    auto linepos = lines.begin();
    while(linepos != lines.end()) {
        // cin.getline(str, PATH_MAX); instead do:
        // process *linepos
        ++linepos;
    }
}
...