C++でカスタムレクサーを実装していて、空白を読み込もうとすると、ifstreamはそれを読み上げません。私は>>
を使用して文字で文字を読んでおり、すべての空白がなくなっています。 ifstreamにすべての空白を残してそれを私に読ませる方法はありますか?文字列全体を読むとき、空白で読み込みが止まることは知っていますが、文字で読むことでこの動作を避けることを望んでいました。ifstreamから読み込むと空白が読み込まれない
しようとしました:多くの回答が推奨する.get()
、が、それはstd::noskipws
と同じ効果があり、つまり、私は今、すべてのスペースを得るが、ない私はいくつかの構造をlexのために必要な改行文字。ここで
は、問題のあるコード(拡張コメント切り捨て)
while(input >> current) {
always_next_struct val = always_next_struct(next);
if (current == L' ' || current == L'\n' || current == L'\t' || current == L'\r') {
continue;
}
if (current == L'/') {
input >> current;
if (current == L'/') {
// explicitly empty while loop
while(input.get(current) && current != L'\n');
continue;
}
は、私はwhile
ライン上で破壊し、それが入ってくるようcurrent
のすべての値を見て、そして\r
または\n
がthem-間で間違いないですよん入力は入力ファイルの次の行にスキップします。
while行を壊した場合、 'get'がcontinue行とwhile行ではなく' \ n'であるかのように、 'current'に' \ n'が表示されないことを期待しています。それとも私は誤解したことがありますか? –
'L '\ n''は8bit 'char'ではなく16bit' wchar_t'ですが、違いはありません。 –
@Charles:その後、ファイルの次の行の内容の表示が中断され、表示されなくなります。 @ルネ:それは 'wifstream'です。 – Puppy