C++ 从重定向的标准输入获取输入时使用seekg()

C++ 从重定向的标准输入获取输入时使用seekg(),c++,seekg,C++,Seekg,因此,我尝试使用cin.get()读取字符串两次。输入被重定向为“程序

因此,我尝试使用cin.get()读取字符串两次。输入被重定向为“程序<输入”。因此,使用seekg()是有效的

正如titel所说,我想我可以使用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
}
第二个while循环没有做任何事情,因此我显然没有正确使用seekg。有人能告诉我我做错了什么吗


谢谢你的帮助

您不能在流/管道上搜索。它们不会继续存在于记忆中。假设键盘直接连接到您的程序。你能用键盘做的唯一操作就是请求更多的输入。它没有历史

如果它只是一个无法搜索的键盘,但如果它被重定向为<在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";
}
#包括
int main(){
标准::cin.seekg(1,标准::ios::beg);
if(std::cin.fail())

std::cout您无法在流/管道上搜索。它们不会继续存在于内存中。想象一下键盘直接连接到您的程序。您可以对键盘执行的唯一操作是请求更多输入。它没有历史记录

如果它只是一个无法搜索的键盘,但如果它被重定向为<在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";
}
#包括
int main(){
标准::cin.seekg(1,标准::ios::beg);
if(std::cin.fail())

std::cout您不能在流上搜索。您必须取消字符设置。

您不能在流上搜索。您必须取消字符设置。

您不能这样做。std::cin通常连接到终端,因此不可能进行随机访问

如果您使用的流是std::istringstream或std::ifstream,则可以这样做


我的建议是将std::cin中的所有字符读入单个std::字符串,然后从该字符串创建一个std::istringstream,然后在该std::istringstream而不是std::cin上尝试您的技术。

您不能这样做。std::cin通常连接到终端,因此不可能进行随机访问

如果您使用的流是std::istringstream或std::ifstream,则可以这样做


我的建议是将std::cin中的所有字符读入单个std::字符串,然后从该字符串创建一个std::istringstream,然后在该std::istringstream而不是std::cin上尝试您的技术。

您不能在流上搜索,但可以使用
std::cin.peek()
std::cin.unget()

1) 通过使用
cin.peek()

2) 通过使用
cin.unget()


您不能在流上搜索,但可以使用
std::cin.peek()
std::cin.unget()

1) 通过使用
cin.peek()

2) 通过使用
cin.unget()


嗯,这很奇怪,因为我的作业规范要求我们从标准输入中获取输入。我的教授说,为了对输入进行两次传递,我们需要使用seekg()…可能我误解了指导原则。如果我使用输入修正,比如“programchar c; while (cin.get(c)) { //do stuff } cin.unget(); while (cin.get(c)) { //do stuff with the string a second time }