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;
}
}
auto buff = std::cin.rdbuf();
while (true)
{
// if a newline was entered
if (buff->sgetc() == '\n')
{
// discard the newline
buff->stossc();
// get next character, if newline then quit
if (buff->sgetc() == '\n')
{
buff->stossc();
break;
}
}
// read input into string
std::cin >> sString;
nVec.push_back(sString);
}
2条答案
按热度按时间5t7ly7z51#
你不能在token-wise提取中“不输入任何东西”。停止循环的唯一方法是用户发送文件结束(Linux上的Ctrl-D)。我个人认为这是正确的行为,但如果你想以空输入结束,你需要阅读行:
这样,你就可以将每行标记为多本书。如果你只想每行一本书,那么去掉内部循环,只写
std::istringstream(line) >> book;
。t9aqgxwy2#
实际上,当输入“nothing”时,它可能会中断。您可以使用
stream_buf
来实现这一点。下面是您的代码按预期工作:此代码将等待输入空换行符后退出。
如果你想在一行中输入所有的字符串,并且在第一个换行符处换行,那么你可以使用下面的代码: