gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:47 26 4
gpt4 key购买 nike

所以我尝试使用 cin.get() 两次读入一串字符。输入被重定向为“程序<输入”。所以使用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
}

第二个 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";
}

给予:

user@host:/tmp > ./a.out
Failed to seek
Failed to seek
user@host:/tmp > ./a.out < test.cc
OK

关于c++ - 从重定向的标准输入获取输入时使用 seekg(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11765718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com