- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
考虑以下因素:
char c;
cin >> c;
cin.unget();
假设char输入成功,unget是否保证至少能备份那个字符?如果我请求并成功获取到一个字符串,是否可以保证允许我一直调用 unget 直到该字符串的开头?
最佳答案
保证您能够unget
至少 1 个字符。是否超过一个取决于实现和情况,所以你不应该假设你可以 unget
不止一个。
编辑:抱歉,我在想 libc 的 int unget(int ch, FILE *stream)
.标准说:
One character of pushback is guaranteed. If the ungetc function is called too many times on the same stream without an intervening read or file positioning operation on that stream, the operation may fail.
我会看看是否能准确找到关于 basic_istream<>& unget()
的内容
编辑: 好的,这就是 c++ 标准对 basic_istream<>& unget()
的描述(粗体由我添加):
Behaves as an unformatted input function (as described in 27.6.1.3, paragraph 1). After constructing a
sentry
object, if!good()
callssetstate(failbit)
which may throw an exception, and return. Ifrdbuf()
is not null, callsrdbuf()->sungetc()
. Ifrdbuf()
is null, or ifsungetc()
returnstraits::eof()
, callssetstate(badbit)
(which may throwios_base::failure
(27.4.4.3)).
所以重要的是它调用了sungetc()
,所以让我们看看标准对此有何规定:
If the input sequence putback position is not available, returns
pbackfail()
. Otherwise, decrements the next pointer for the input sequence and returnstraits::to_int_type(*gptr())
.
我没有看到任何明确说明限制的内容,因此值得一试。如果我理解正确,它将调整后备流缓冲区中的指针。所以只要缓冲区中有足够的“历史”,它就应该继续成功。
然而,与 C 不同的是,您似乎永远无法保证它会工作,但您很可能能够 putback 多个字符。
所以我的建议是不要依赖于返回一个以上的字符,并始终检查失败。
关于c++ - unget有任何保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152956/
假设input.txt是一个1字节的文本文件: std::ifstream fin("input.txt", std::ios::in); fin.get(); // 1st
我正在二进制文件中寻找一个 2 字节序列,该序列太大而无法放入内存。我不能一次简单地读取 2 个字节,因为,例如 xx xx x1 2x xx 同样,我不能简单地查找第一个,然后查看第二个是否存在,因
我正在从 ifstream 中读取字符,如果这些字符不符合特定条件,那么我将 unget() 次数等于这些字符。在我到达文件末尾之前,这一切都很好。然后,如果我尝试 unget(),则好的位设置为 0
我有以下 C++ 程序并在 Windows 7 上使用 Visual Studio 2008 运行它。我获取然后取消获取一个字符。这样做之后,文件位置就不同了。为什么?我该如何解决这个问题? test
我正在使用标准 iostream 从文件中获取一些输入,我对 unget() 与 putback(character) 感到困惑。在我看来,这些函数实际上是相同的,其中 unget() 只记得输入的字
unget 并没有像我想象的那样工作……让我自己解释一下。正如我所想,unget 获取流中提取的最后一个字符,并将其放回流中(并准备好再次提取)。在内部,它正在减少流缓冲区中的指针(创建哨兵和所有这些
昨天我在相当简单的代码中发现了一个奇怪的错误,该错误基本上是从 ifstream 获取文本并将其标记化。实际上失败的代码进行了多次 get()/peek() 调用以查找 token “/*”。如果在流
我的 C 程序已从 Linux 上的 TCP 套接字读取(使用 read(2) 或 recv(2))几个字节。是否可以将这些字节推回,以便后续的 read(2) 和 recv(2) 调用(在我无法控制
有人可以澄清我对 cin.unget() 函数的一点困惑吗?请考虑这段代码: void skip_to_int() { if (cin.fail()) {
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
我有一些解析代码允许将转义序列输入到文本字符串中: // In a file or large, multi-line string ... my_parameter="A setting for t
我是一名优秀的程序员,十分优秀!