使用 std::cin.getline() 后如何保留 std::cin 的缓冲区
How to keep the buffer of std::cin after using std::cin.getline()
我试图在使用 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;
}
I am trying to re-read the cin
buffer after using cin.getline()
5 times
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;
}
}
我试图在使用 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;
}
I am trying to re-read the
cin
buffer after usingcin.getline()
5 times
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;
}
}