永发信息网

C++输入排错

答案:2  悬赏:20  手机版
解决时间 2021-05-04 06:14
  • 提问者网友:無理詩人
  • 2021-05-03 22:17

========================

double num;

cin>>num;

//当符合要求

cout<<"ok"<<endl;

//当不符合要求

cout<<"wrong"<<endl;

========================

符合要求的数据:

(纯数字)

123.0

32

654.765

========================

不符合要求的数据:

(非纯数字)

abc

12e34

23 54

342~

as3

。。。。。

========================

请各位大虾给出解决方案。谢啦

最佳答案
  • 五星知识达人网友:孤独的牧羊人
  • 2021-05-03 23:41
主要是e和空格不好处理,建议以字符串形式读入,然后再转成double
已经修改,可以通过vc6测试,用unsetf( skipws )替代getline



#include <iostream>
#include <sstream>
#include <string>
using namespace std;

template <class T, class U>
T lexical_cast( U u )
{
stringstream ss;
ss << u;
T t;
ss >> t;
return t;
}

bool cindbl( double& n )
{
string s;
cin.unsetf( ios::skipws );
cin >> s;
cin.setf( ios::skipws );
if ( s.find_first_not_of("0123456789.") != string::npos )
return false;
else
n = lexical_cast<double>( s );
return true;
}

int main()
{
double n;
if ( cindbl( n ) ) cout << "ok"; else cout << "error";
}
全部回答
  • 1楼网友:一袍清酒付
  • 2021-05-04 00:44
#include <iostream.h> void main() { double a; if(cin>>a) { cout<<"yes"<<endl; } else { cout<<"no"<<endl; } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯