4

の答え、特にリンクされたIdeoneの例では、@Nawazはのバッファオブジェクトを変更して他のcout何かに書き込む方法を示しています。これにより、それを利用して、からの入力を準備することを考えcinましたstreambuf

#include <iostream>
#include <sstream>
using namespace std;

int main(){
        streambuf *coutbuf = cout.rdbuf(cin.rdbuf());
        cout << "this goes to the input stream" << endl;
        string s;
        cin >> s;
        cout.rdbuf(coutbuf);
        cout << "after cour.rdbuf : " << s;
        return 0;
}

しかし、これは期待どおりに機能しません。つまり、失敗します。:| cin提供されたから読み取るのではなく、ユーザー入力を期待しますstreambuf。これを機能させる方法はありますか?

4

2 に答える 2

4
#include <iostream>
#include <sstream>

int main()
{
    std::stringstream s("32 7.4");
    std::cin.rdbuf(s.rdbuf());

    int i;
    double d;
    if (std::cin >> i >> d)
        std::cout << i << ' ' << d << '\n';
}
于 2011-05-16T06:15:49.610 に答える
3

その質問を無視して、さらに調査しながら、私はそれを機能させました。私がしたことは、実際には計画とは逆でした。私はそれ自身を埋めるのではなく、読むためにを提供cinしました。streambuf

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main(){
  stringstream ss;
  ss << "Here be prepared input for cin";
  streambuf* cin_buf = cin.rdbuf(ss.rdbuf());
  string s;
  while(cin >> s){
    cout << s << " ";
  }
  cin.rdbuf(cin_buf);
}

直接変更せずに準備された入力を提供できるかどうかを確認するのは良いことですがcin streambuf、別のバッファーから読み取るのではなく、バッファーに直接書き込むこともできます。

于 2011-05-16T06:11:54.953 に答える