Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ cin.忽略备选方案,清除缓冲区中的所有内容_C++ - Fatal编程技术网

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()