0

cin を使用して 1 文字ずつ読み取っているテキスト ファイルがある場合:

char text;
cin >> text;
cout << char << endl;

">" で始まる行を新しい行まで無視したい場合、どうすればそれができるでしょうか?

4

2 に答える 2

1

char次を使用して読み取りを比較できます'>'::

int strncmp ( const char * str1, const char * str2, size_t num );

見つかった場合は、char読み取りが等しくなるまでスキップします'\n'。つまり、次のstrncmp値が返さ0れるまでスキップします。( char, '\n', 1 )

于 2013-01-30T05:15:52.630 に答える
0

通常、次のような std::istream::ignore を使用します。

static const int max_line = 65536;

if (text == ">")
    std::cin.ignore(max_line, '\n');

スキップする最大距離を 64K バイトに指定したことに注意してください。多くの人が のようなものを推奨していますstd::numeric_limits<std::streamsize>::max()。これは基本的に、区切り文字 (この場合は改行) が見つかるまで任意の量のテキストをスキップすることを意味します。

IMO、通常、このような膨大な数を指定することはお勧めできません。改行が表示されずに時間がかかりすぎる場合は、停止して、悪いデータを取得したと想定しても安全です。問題があることを合理的に確信するのに十分な量を読んだらすぐに、停止してユーザーに警告するほうがよいでしょう。プログラムがロックされているように見えて、数ギガバイトの役に立たないデータを読み取るのに何分も費やすよりも (その後、ユーザーにエラーを与える可能性があります)とにかくメッセージ)。

もう 1 つの可能性 (特に、適切な入力が得られると確信している場合) は、行全体を読み取ることから始めて (たとえば、std::getline を使用)、それが a で始まる場合は、>その行の処理をスキップして、次の行に進みます。次のものを読むために戻ってください。

于 2013-01-30T05:45:42.857 に答える