首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行cin后,计算标准输入中的字符数

执行cin后,计算标准输入中的字符数
EN

Stack Overflow用户
提问于 2012-09-03 12:41:24
回答 3查看 1.6K关注 0票数 0

我有一些代码,基本上看起来像这样

代码语言:javascript
复制
int a;
cin>>a;

if(!cin.good())
{
    std::cin.clear();
    std::cin.ignore(2);

    // set some default value for 'a' and display some messages
}

如果我给出一个整数(如预期的那样),或者如果我试着把它弄乱并给出最多2个字符,这就很好用了。例如:‘'s’,但如果我输入一个3个字符的'sss‘,最后的’s‘不会被忽略,并被接受为我的程序中的更多cin的输入。

有没有办法计算标准输入(缓冲区)中的字符数?在第一个cin发生之后,所以我可以安全地忽略所有它们。

EN

回答 3

Stack Overflow用户

发布于 2012-09-03 13:03:00

这是怎么回事?它应该忽略输入缓冲区中所有可用的东西,防止第三个s在以后被消耗。它使用std::basic_streambuf::in_avail

代码语言:javascript
复制
std::cin.ignore(std::cin.rdbuf()->in_avail());

如果这不起作用,您可以尝试忽略,直到到达换行符为止。

代码语言:javascript
复制
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
票数 3
EN

Stack Overflow用户

发布于 2012-09-03 12:56:46

不清楚你的意思是什么,但一个意思可能是你想忽略当前行上的所有字符。为此,您不需要知道字符数:

代码语言:javascript
复制
std::cin.ignore(std::numeric_limits<std::size_type>::max(), '\n');

上面的语句将忽略所有字符,直到它提取了换行符。

票数 2
EN

Stack Overflow用户

发布于 2012-09-03 13:17:10

通过谷歌搜索,我在how to cope with extraneous characters in cin上找到了这篇文章。

显然,在std::cin上直接使用>>不是一个好的做法。像这样使用它,

代码语言:javascript
复制
int a;
std::string line;
std::getline( cin, line );
std::stringstream ss( line );

if ( ss >> a )
    // Success

// Failure: input does not contain a valid number

因为我们每次都使用std::getline()读取\n,所以也会从std::cin中提取无关的字符并放入line中。

Code source

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12242078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档