c++模板输入验证
c++ template input validation
为了方便地提取输入并验证正确的类型,我使用了以下代码。但是,没有触发EOF文件的结束。
template< typename T >
std::istream& read(std::istream &istr, T &val)
{
std::string s;
std::getline(istr, s);
if (istr.good())
{
s.erase(s.find_last_not_of(" n") + 1);
std::stringstream iss(s);
iss >> val;
if (! iss.good())
istr.setstate(std::ios::failbit);
char c;
if (iss.get(c))
istr.setstate(std::ios::failbit);
}
return istr;
}
int main(int argc, char **argv)
{
int input = 0;
std::cout << "Please enter an integer>" << std::flush;
for (;;)
{
if (read(std::cin, input))
break;
std::cin.clear();
std::cout << "Please, enter only an INTEGER>" << std::flush;
}
std::cout << "Press <enter> to quit>";
std::cin.ignore(std::numeric_limits< std::streamsize >::max(), 'n');
return 0;
}
iss >> val
读取所有字符并"触摸"流的末尾,因此每次都设置EOF。
template< typename T >
std::istream& read(std::istream &istr, T &val)
{
std::string s;
std::getline(istr, s);
if (istr.good()) {
std::istringstream iss(s); //leave the 'n'
if (! (iss >> val))
istr.setstate(std::ios::failbit);
//if it gets another character that isn't a newline
char a=0;
if (iss.get(a) && a!='n')
istr.setstate(std::ios::failbit);
}
return istr;
}
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- 正在验证c++中用户的整数输入
- cin 的十进制输入验证?
- 输入验证以筛选出字符、字符串和一系列整数
- 输入验证将数字放入向量中
- GoogleMock:如何验证输入参数的调用次数?
- 使用函数验证输入
- 如何验证输入仅是数字数字
- 提升灵气验证输入解析器
- 当循环不中断时,使用 cin.ignore 和 cin.clear() 来验证输入
- C++,如何验证输入的数据是否为正确的数据类型
- 验证输入
- 使用正则表达式验证输入
- 验证输入和getline()函数
- 函数验证输入c++简单
- C++如何验证输入以与重载>>运算符一起使用
- 在Windows c++应用程序中验证输入UTF-8序列
- 抵押计算器验证输入错误
- 验证输入的好方法是什么?