Я должен использовать filtering_istream в качестве оболочки для std::cin. но это не работает, как я ожидал. Он ждет E.O.F, пожалуйста, помогите мне понять поведение.
#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
// compile using g++ -std=c++11 -lboost_iostreams
int main(){
boost::iostreams::filtering_istream cinn(std::cin);
std::cout << "Write something:";
char c;
while(true){
cinn.get(c);
std::cout << "Your character is : " << c << "\n";
if(c=='.') break;
}
}
Я хочу, чтобы он работал аналогично этому коду.
#include <iostream>
#include <boost/iostreams/filtering_stream.hpp>
int main(){
//boost::iostreams::filtering_istream cinn(std::cin);
std::cout << "Write something:";
char c;
while(true){
std::cin.get(c);
std::cout << "Your character is : " << c << "\n";
if(c=='.') break;
}
}
Вывод кода1
$./a.out
hello
how.are_you
Write something:Your character is : h
Your character is : e
Your character is : l
Your character is : l
Your character is : o
Your character is :
Your character is : h
Your character is : o
Your character is : w
Your character is : .
вывод code2
$./a.out
Write something:hello
Your character is : h
Your character is : e
Your character is : l
Your character is : l
Your character is : o
Your character is :
how.are_you
Your character is : h
Your character is : o
Your character is : w
Your character is : .
Код 2 дает результат, как я ожидаю. Он читает каждую строку и обрабатывает ее. в то время как Code1 читает все строки, пока не получит E.O.F. а затем он печатает вывод.
Оба кода ведут себя по-разному. Я не могу понять это поведение. Пожалуйста помоги. Заранее спасибо.