【发布时间】:2013-11-18 19:56:18
【问题描述】:
unget 没有按照我想象的方式工作……让我自己解释一下。正如我认为的那样, unget 获取流中提取的最后一个字符并将其放回流中(并准备再次提取)。在内部,它正在减少流缓冲区中的指针(创建哨兵和所有这些东西)。
但是,当我一个接一个地使用两个 unget() 时,它的行为变得非常奇怪。如果写hello<bye 之类的东西,我使用< 作为分隔符,如果我使用getline 和后来的两个ungets,它返回我你好,而不是o<bye"。这是我的代码:
#include <iostream>
#define MAX_CHARS 256
using namespace std;
int main(){
char cadena[MAX_CHARS];
cout << "Write something: ";
cin.getline(cadena, MAX_CHARS, '<');
cout << endl << "Your first word delimited by < is: " << cadena << endl;
cin.unget(); //Delimiter (removed by getline) is put back in the stream
cin.unget(); //!?
cin >> cadena;
cout << "Your phrase with 2 ungets done..." << cadena;
return 0;
}
尝试使用 bye<hello,然后 cadena 得到 bye 而不是 e<hello 我认为 unget 每次调用时都与最后一个字符一起工作,f*** 发生了什么?
【问题讨论】:
-
"我认为 unget 每次调用时都与最后一个字符一起工作" — 不,只有一次。
-
那它是如何工作的呢? (感谢黑隼把
-
@n.m.:流缓冲区接口中的任何内容都不会阻止尽可能多的放回字符。 ...而且没有任何东西可以保证您甚至可以放回一个角色!这完全取决于流缓冲区。