トークンごとの抽出に「何も入力しない」ことはできません。ループを停止する唯一の方法は、ユーザーがファイルの終わりを送信することです(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;
ください。