在执行cin之后,对标准输入中的字符数进行计数
Counting the number of characters in standard input after a cin has been executed
我有一些代码基本上看起来像这个
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个字符,这会很好。例如"ss",但如果我给出一个3个字符的输入"sss",最后一个"s"不会被忽略,并且会被接受为我在程序中的更多cin的输入。
有没有办法在第一个cin发生后计算标准输入(缓冲区?)中的字符数,这样我就可以安全地忽略所有字符。
这是如何工作的?它应该忽略输入缓冲区中的所有可用内容,以防止以后消耗第三个s
。它使用CCD_ 2。
std::cin.ignore(std::cin.rdbuf()->in_avail());
如果这不起作用,你可以试着忽略,直到你到达换行符。
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
您的意思还不清楚,但一个意思可能是您想要忽略当前行上的所有字符。你不需要知道字符的数量就可以做到这一点:
std::cin.ignore(std::numeric_limits<std::size_type>::max(), 'n');
上面的语句将忽略所有字符,直到提取出换行符为止。
通过谷歌搜索,我发现了这篇关于如何处理cin中的无关字符的文章。
显然,在std::cin
上直接使用>>
不是一个好的做法。像这样使用,
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
中。
代码源
相关文章:
- 碱基对映射 - 将 argv[i] 移动到整数或字符作为输入
- 字符的输入/输出操作
- 从标准输入读取文件后读取用户输入
- 如何从标准输入中检测格式化输入错误?
- C++ - 标准输入环路
- 快速读取标准输入缓冲区,无需检查
- 将标准输入中的双精度存储在矢量中
- C++字符数组不接受超过 4 个字符的输入
- 如何将 getline 与标准输入一起使用?
- 从 C++ 中的标准输入迭代读取字节
- C++计算标准输入的字数
- 如何从 c++ 中的给定标准输入中获取每个字符的偏移量?
- 为什么此代码从标准输入中少一个输入?
- 如何在C++中从标准输入中获取变量输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 查找字符在标准输入文本中出现的次数
- 在执行cin之后,对标准输入中的字符数进行计数
- C++ 如何从标准输入加载到最多 5 个字母数字字符的字符数组
- 无符号字符的标准输入