0

通常、私は次のように制御ループを書きます: "done" が入力されるまで、int をベクター nVec に書き込むループ。

while (cin >> sString){
    if (sString="done")
    { 
        break;
    }
    nVec.push_back(sString);

}

これは問題なく動作しますが、ユーザーが何も入力しなかった (Enter キーを押した) ときにループを終了させたい場合は、どうすればよいでしょうか?

4

1 に答える 1

1

トークンごとの抽出に「何も入力しない」ことはできません。ループを停止する唯一の方法は、ユーザーがファイルの終わりを送信することです(LinuxではCtrl-D)。個人的にはこれが正しい動作だと思いますが、空の入力で終了したい場合は、次の行を読む必要があります。

Sales_item total;

for (std::string line; std::getline(std::cin, line); )
{
     if (line.empty()) { exit_program(); /* or "break" */ }

     std::istringstream iss(line);
     for (Sales_item book; iss >> book; )
     {
          total += book;
          std::cout << "The current total is " << total << std::endl;
     }
}

このようにして、各行を場合によっては複数の本にトークン化します。1行に1冊の本が必要な場合は、内側のループを取り除いて、「」と言ってstd::istringstream(line) >> book;ください。

于 2012-05-16T18:33:35.717 に答える