5

重複の可能性:
Windows コンソールで getchar() が return を EOF として認識しないのはなぜですか?

簡単な問題があります... 何かがある限り標準入力から行を読みたいとしましょうが、それが何行になるかわかりません。たとえば、私は学校の仕事をしていて、インプットは

a
ababa
bb
cc
ba
bb
ca
cb

何行になるか正確にはわからないので、試してみました

string *line = new string[100];
    int counter = 0;
   while(getline(cin,line[counter]))
   {
    counter++;
   }

しかし、うまくいきません...助けてくれてありがとう。

4

5 に答える 5

1

私が考えることができる最も単純な行カウンターは、次のようなものです。

#include <string>
#include <iostream>

unsigned int count = 0;

for (std::string line; std::getline(std::cin, line); )
{
    ++count;
}

std::cout << "We read " << count << " lines.\n";

テスト:

echo -e "Hello\nWorld\n" | ./prog

空行を割引したい場合は、if (!line.empty()) { ++count; }代わりに言ってください。

于 2012-11-23T18:10:47.273 に答える
0

これは機能するはずです:

int cont = 0;
string s;
while(cin >> s) { //while(getline(cin,s)) if needed
  if(s.empty()) break;
  ++cont;
}
于 2012-11-23T19:25:26.630 に答える
0

これには、ファイル マーカーの終わりを使用することもできます。その使い方はこんな感じです。

std::ifstream read ("file.txt") ;

while(!read.eof())
{
  //do all the work
}

ファイルの終わりに達した場合、この関数は true を返します。ですから、それに遭遇するまで続きます。

編集:

コメントにも記載されているように、この方法eofは危険であり、望ましい結果が得られない可能性があります。したがって、すべての場合に実行されるという保証はありません。これがいつ発生するかについては、こちらをご覧ください。

EOFが最後の行を繰り返すまでテキストファイルから読み取る

于 2012-11-23T18:04:14.693 に答える