使用 std::cin.getline() 后如何保留 std::cin 的缓冲区

罗马皇帝

我试图在使用 cin.getline() 5 次后通过调用 cin.seekg() 重新读取 cin 缓冲区,但在再次调用 cin.getline() 后,而不是从顶部重新读取数据,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;
}
一切都在流动

我试图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;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: cin:清空输入缓冲区而不会阻塞

来自分类Dev

std :: cin:清空输入缓冲区而不会阻塞

来自分类Dev

流缓冲区(cin,getline等)

来自分类Dev

istream std :: cin如何修改自定义istream缓冲区?

来自分类Dev

关闭文件混乱与std :: getline()和cin?

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

使用时如何重设std :: cin?

来自分类Dev

为什么在使用getline之后cin无法获得缓冲区数据?

来自分类Dev

我可以循环直到 `std::cin` 在输入缓冲区中看到 `\n` 字符吗?

来自分类Dev

std :: cin >> std :: string如何实现?

来自分类Dev

getline如何与cin一起使用?

来自分类Dev

std :: cin跳过空格

来自分类Dev

使用std :: cin忽略/跳过令牌

来自分类Dev

使用std :: cin忽略/跳过令牌

来自分类Dev

使用std :: cin输入停止while循环

来自分类Dev

如何使用std :: hash哈希缓冲区?

来自分类Dev

使用std :: cin中的std :: setw限制输入大小

来自分类Dev

我应该如何使用c ++处理“ std :: cerr”和“ std :: cin.fail()”?

来自分类Dev

std :: cin.fail()问题

来自分类Dev

std::cin 导致无限循环

来自分类Dev

cin.ignore如何与cin和getline一起使用?

来自分类Dev

std :: cout << std :: cin有什么作用?

来自分类Dev

C ++使用std :: string,std :: wstring作为缓冲区

来自分类Dev

使用std :: cin >>时可能会丢弃返回字符?

来自分类Dev

为什么我不能使用std:cin作为参数

来自分类Dev

我应该将printf与std :: cin混合使用吗?

来自分类Dev

在弦上使用cin和getline

来自分类Dev

cin.getline无法使用switch语句

来自分类Dev

如何知道std :: cin是否来自重定向?