C++ cin.忽略备选方案,清除缓冲区中的所有内容
除了使用类似于C++ cin.忽略备选方案,清除缓冲区中的所有内容,c++,C++,除了使用类似于cin.ignore(10000,'\n'),还有其他方法吗? 例如,我要一个名字,用户开始在一行中输入他100页的生活故事,而不按enter键。没有办法确切知道用户会持续多长时间,C++中有没有一个catch将所有用户输入转储到下一个提示?我到处搜索,所有的建议都说在cin.ignore参数中抛出任意大的数字 是否有可靠的编码方法: while cin.get(variable, #, delimiter) is in a fail state; { use cin.ig
cin.ignore(10000,'\n')
,还有其他方法吗?
例如,我要一个名字,用户开始在一行中输入他100页的生活故事,而不按enter键。没有办法确切知道用户会持续多长时间,C++中有没有一个catch将所有用户输入转储到下一个提示?我到处搜索,所有的建议都说在cin.ignore
参数中抛出任意大的数字
是否有可靠的编码方法:
while cin.get(variable, #, delimiter) is in a fail state;
{
use cin.ignore() until there is nothing left in the buffer;
}
cin.clear()
谢谢 使用:
std::cin.ignore(std::numeric_limits::max(),'\n');
只需指定最大流大小即可
std::numeric_limits<std::streamsize>::max()
std::numeric\u limits::max()
由于它是一种无符号类型,您可以牺牲显式性来简化它,只需说
-1
-1在哪里起作用?我尝试了std::cin.ignore(std::numeric_limits::max(),'\n');在这种情况下,它会起作用,达到预期效果。@user3363001:当转换为无符号类型时,-1
将成为该类型的最大值(因为转换是通过模运算完成的)。如果你不想写更长的数值限制
表达式,你可以直接写出来。
std::numeric_limits<std::streamsize>::max()