2

C++でテキストファイルを読むとき、どうしたら"\n"よいかなどについて質問があります。"\r\n"次の一連の操作を実行すると、問題が発生します。

int k;
f>>k;
string line;
getline(f,line);

次のような入力ファイルの場合

1
abc

の後f.get()のエンディングを読み上げるには、 を付けなければなりません。持っている場合は、2回も行う必要があります。"\n"f>>kf.get()"\r\n"

>>と混ぜると、このようなファイルを読むエレガントな方法は何getlineですか?

ありがとうございました。

編集 また、指定されたファイルに行末文字"\n"または"\r\n".

4

2 に答える 2

4

一緒に楽しく仕事>>をするには、少し手を加える必要があります。getline一般に、オペレーターを使用してストリームから何かを読み取って>>も、後続の空白 (改行文字) は破棄されません。

これを解決するための通常のアプローチは、istream::ignore次の関数を使用>>することです。次の改行までのすべての文字を破棄するように指示します。(ただし、改行までのすべての文字を実際に破棄したい場合にのみ役立ちます)。

例えば

#include <iostream>
#include <string>
#include <limits>

int main()
{
    int n;
    std::string s;
    std::cout << "type a number: ";
    std::cin >> n;
    std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
    std::cout << "type a string: ";
    std::getline( std::cin, s );
    std::cout << s << " " << n << std::endl;
}

編集(質問でファイルについて言及したことは承知していますが、std::cinがifstreamと完全に交換可能であることは言うまでもありません)

于 2012-04-21T00:35:41.723 に答える
0

まったく異なるアプローチは、tr(Linux を使用していると仮定して) を使用してデータ ファイルを前処理し、削除\rしてから使用することgetline()です。

于 2012-04-21T04:32:43.390 に答える