所以我试图用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.有人能告诉我我做错了什么吗?
谢谢你的帮助!
你不能在溪流/管道上寻找.它们不会继续存在于记忆中.想象一下,键盘直接连接到您的程序.您可以使用键盘进行的唯一操作是要求更多输入.它没有历史.
如果它只是一个你无法寻找的键盘,但是如果它被重定向为<在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