输入模板函数
来源:互联网 发布:java class源码 编辑:程序博客网 时间:2024/06/07 06:28
输入一个大于或等于0的函数
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
template<class T>
bool input(T& a)
{
int i = 1;
while(true)
{
cin >> a ;
if(a >= 0)
return true;
else
{
if(i == 3) return false;
cout << "the input is not ge than 0"
<< "do you want to try again? Y / N "
<< endl;
char ch;
cin >> ch;
if(ch != 'Y' && ch != 'y' ) return false;
++i;
}
}
}
int main()
{
int inum;
double dnum;
cout << "please input a integer number" << endl;
if(!input(inum))
{
cout << "the input is not correct" << endl;
return false;
}
cout << inum;
cout << "please input a float number" << endl;
if(!input(dnum))
{
cout << "the input is not correct" << endl;
return false;
}
cout << dnum;
return 0;
}
总结, 程序给用户提供三次修改错误输入的机会,这里的输入错误只考虑了输入负数的情况,没有考虑输入非数字等情况下导致cin处于错误状态等情况的处理.
对上述代码进行修改
template<class T>
bool input(T& a)
{
int i = 1;
while(true)
{
cin >> a ;
if(cin && a >= 0) // 保证输入正确
return true;
else
{
if(i == 3) return false;
if(!cin)
{
cin.clear(); // 恢复cin到正确状态
cin.get(); // 清空缓冲区 , 以便接下来正确输入, 没有这句,上次错误输入的内容仍旧留在缓冲区中,只能清掉一个字符
// 改成 cin.ignore((std::numeric_limits <int> ::max)(), '/n'); 实现输入缓冲区完全刷新
}
cout << "the input is not ge than 0"
<< "do you want to try again? Y / N "
<< endl;
char ch;
cin >> ch;
if(ch != 'Y' && ch != 'y' ) return false;
++i;
}
}
}
总结,考虑了如果要求输入数字,实际输入了字符情况的处理,注意到 cin.clear()之后,不能直接使用cin输入下一个字符.
问题: cin.get 或 cin.ignore 只能删除掉缓冲区中的一个字符,考虑如何清除缓冲区所有内容.
关于输入出错,参考了http://topic.csdn.net/t/20050518/21/4017759.html以及http://blog.csdn.net/BEN1978/archive/2006/06/29/850352.aspx
- 输入模板函数
- 输入模板
- 实现一个可以阻塞标准输入的模板函数
- 输入外挂~模板记录
- 输入挂C++模板
- 快速输入模板
- POI模板批量输入
- mathjax矩阵输入模板
- 快速输入的模板
- 超级输入模板
- 输入流 输入函数
- 函数模板、类模板
- 模板--->函数模板
- 模板函数,模板类
- 模板之函数模板
- C++ 模板->模板函数
- 类模板(函数模板)
- 模板---函数模板
- 当Windows系统C盘空间不足
- c++,C#,java中的类
- 10个经典的web2.0配色方案网站
- LINUX下ORACLE 10G的安装
- How do I configure Miranda for Google Talk
- 输入模板函数
- C# 操作dtsx包
- 标准模板库(STL)介绍(上)
- SDO 的组成部分和实现的包结构
- 留言版的设计与实现
- 深入C++的new
- 国外10个ASP.Net C#下的开源CMS
- 投票模块的设计与实现
- 分享SQL语句从M条数据读取到N条的几种写法!