通常、私は次のように制御ループを書きます: "done" が入力されるまで、int をベクター nVec に書き込むループ。
while (cin >> sString){
if (sString="done")
{
break;
}
nVec.push_back(sString);
}
これは問題なく動作しますが、ユーザーが何も入力しなかった (Enter キーを押した) ときにループを終了させたい場合は、どうすればよいでしょうか?
通常、私は次のように制御ループを書きます: "done" が入力されるまで、int をベクター nVec に書き込むループ。
while (cin >> sString){
if (sString="done")
{
break;
}
nVec.push_back(sString);
}
これは問題なく動作しますが、ユーザーが何も入力しなかった (Enter キーを押した) ときにループを終了させたい場合は、どうすればよいでしょうか?
トークンごとの抽出に「何も入力しない」ことはできません。ループを停止する唯一の方法は、ユーザーがファイルの終わりを送信することです(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;ください。