从重定向的stdin获取输入时使用seekg()

Wak*_*kka 1 c++ seekg

所以我试图用cin.get()两次读取一串字符.输入被重定向为"program <input".所以使用seekg()是有效的.

正如标题所说,我以为我可以使用seekg()来保存字符串的起始位置,所以我可以再次使用相同字符串的起始位置.

这是我的尝试:

char c;
while (cin.get(c))
{
  //do stuff 
}

cin.seekg(0, ios::beg);

while (cin.get(c))
{
  //do stuff with the string a second time
}
Run Code Online (Sandbox Code Playgroud)

第二个while循环没有做任何事情,所以我显然没有正确使用seekg.有人能告诉我我做错了什么吗?

谢谢你的帮助!

Fle*_*exo 5

你不能在溪流/管道上寻找.它们不会继续存在于记忆中.想象一下,键盘直接连接到您的程序.您可以使用键盘进行的唯一操作是要求更多输入.它没有历史.

如果它只是一个你无法寻找的键盘,但是如果它被重定向为<在shell中寻求工作正常:

#include <iostream>

int main() {
  std::cin.seekg(1, std::ios::beg);
  if (std::cin.fail()) 
    std::cout << "Failed to seek\n";
  std::cin.seekg(0, std::ios::beg);
  if (std::cin.fail()) 
    std::cout << "Failed to seek\n";

  if (!std::cin.fail()) 
    std::cout << "OK\n";
}
Run Code Online (Sandbox Code Playgroud)

放弃:

user @ host:/ tmp> ./a.out
无法寻找
无法寻找
user @ host:/ tmp> ./a.out <test.cc
OK