作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
所以我尝试使用 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/
我是一名优秀的程序员,十分优秀!