9

最初に私の理解はそれです

cin >> std::noskipws >> str;

cin「ihavespaces」のように一行をに貼り付ける必要がありますstr。ただし、これは「i」をにのみ入れstrます。これは誤った仮定である可能性があり、その場合はstd::noskipwsどうなりますか?

私は機能がstd::getlineあり、それが機能することを知っていますが、単に教育目的のために、私は私のために仕事に取り掛かろうと決心std::noskipwsしました。私は過去に試しましたが、うまくいかないので、通常は次に進んで使用しますstd::getline

私がこれまでに見つけたと思うのは、技術std::noskipws的には設定を解除std::skipwsすることです。basic_iostream

ios_base::unsetf(std::ios::skipws); 

また

ios_base::unsetf(ios_base::skipws);

そこで、自分のストリームフォームbasic_iostreamを継承し、それらのフラグを手動で設定(設定解除)してみました。まだサイコロはありません。

それで、私は完全にベースから外れているのですか、それともこれを機能させる方法はありますか?

4

2 に答える 2

13

std::noskipws は、型を読み取ろうとするときに先頭の空白をスキップしないように istream に指示します。先頭に空白がない場合、フラグは影響を与えません。

于 2011-04-13T19:48:21.183 に答える
3

std::skipws次のように動作します:std::istream常に現在の読み取り位置を保持します。std::skipwsが設定されている場合、operator>>が呼び出される前に、現在の読み取り位置が最初の非スペース文字に進められます。

表示されている動作 ( の後の最初のスペースで停止) は、 for (および)'i'が原因です。その演算子はフラグを考慮しません。別のタイプのは別の方法で決定し、スペースをまたいで続行する場合があります。operator>>std::stringstd::wstringstd::istreamoperator<<

于 2011-04-14T09:44:49.743 に答える