输入输出问题?急!!!望高手们快!!!!

sureli 2003-10-10 12:41:37
float a;
cin>>a;
我现在输入的是jjjj,不是浮点型,程序就会出错,
那么我怎么控制用户输入的一定是浮点型,而不是其他类型的?
...全文
47 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
TianGuangZao 2003-10-11
  • 打赏
  • 举报
回复
#include <iostream>
#include <sstream>

int main()
{
std::string s;
float f = 0;
std::cout << "Input a floating-point value: ";
std::cin >> s;
std::istringstream(s) >> f;
std::cout << f << '\n';
}

输入 0 或错误字符,输出都为 0,其它一切正常。
这个难题就留给大家来解决吧!比如能够区别 0.000....
个人认为如果习惯用 atof ,以后应该改用 strtod,要来的好。
npuanran 2003-10-11
  • 打赏
  • 举报
回复
还是有问题,算了,不改了,睡觉去,困的脑子都糊涂了。
npuanran 2003-10-11
  • 打赏
  • 举报
回复
程序有问题,改一下:

#include <iostream>
#include <string>

using namespace std;

void main()
{
float fff;
string a;
while(true)
{
cin>>a;
fff=atof(a.c_str());
if(fff==0)
{
for(int i=0;i<a.size();i++)
{
if(a[i]!='0') //这里考虑输入为0 的情况
{
cout<<"error!input again:";
continue;
}
}
}
cout<<fff<<endl;
}

}
npuanran 2003-10-11
  • 打赏
  • 举报
回复
我觉得没有必要去做这么复杂的判断(而且要把所有的情况都考虑近去,也不容易),把输入读入一个字符串,然后用atof来转换,如果输入格式正确,返回的就是有效的浮点数,如果不正确,msdn上说返回值不确定。但在vc6中,这种情况的返回值是0。所以我们可以有一个很简单的实现:

#include <iostream>
#include <string>

using namespace std;

void main()
{
float fff;
string a;
while(true)
{
cin>>a;
fff=atof(a.c_str());
if(fff==0)
{
if(a[0]!='0') //这里考虑输入为0 的情况
{
cout<<"error!input again:";
continue;
}
}
cout<<fff<<endl;
}

}


另外,point_to(一 指)的方法也是可行的,但是如果是非法输入的话,比如jjjjj,那么“error!input again:”这句话就会重复输出五次,跟你输入的字符的数目相同。不过这种小问题很容易解决,就不多说了。

ps:个人认为point_to(一 指)兄的写法要更好一些,因为atof这种函数的行为在不同的编译器上实现可能是不一样的,所以这种方法也就没有什么通用性。
lionhu2003 2003-10-10
  • 打赏
  • 举报
回复
float a;
cout<<"请输入一个浮点型的数: ";
cin>>a;
最简单:)
hcj2002 2003-10-10
  • 打赏
  • 举报
回复
加一个判断语句,判断输入是否是一个数字
darcymei 2003-10-10
  • 打赏
  • 举报
回复
用char[]接受,然后转换
Wolf0403 2003-10-10
  • 打赏
  • 举报
回复
终于发现 Regular Expression 的用途了,呵呵。
fishsward 2003-10-10
  • 打赏
  • 举报
回复
对了,还要判断符号的问题,才足够健壮吧?
例如:
-111-233.200
fishsward 2003-10-10
  • 打赏
  • 举报
回复
对楼上的 lemon520(大母猪) 小小改进:
bool check(char* p)
{ int count=0;
for (int i=0;p[i]!='\0';i++)
{
if ((p[i]<'0'||p[i]>'9')&&p[i]!='.') /*输入的字符串包含0-9
return false; 和小数点(.)以外的字符*/

if (p[i]=='.')
{
if(i==0) return false;

else count++;
}
if (count>1) //两个以上的小数点
return false;
}
return true;
}

lemon520 2003-10-10
  • 打赏
  • 举报
回复
我来健壮一下!嘿嘿!
#include <iostream.h>
#include <stdlib.h>

bool check(char* p)
{ int count=0;
for (int i=0;p[i]!='\0';i++)
{
if ((p[i]<'0'||p[i]>'9')&&p[i]!='.') /*输入的字符串包含0-9
return false; 和小数点(.)以外的字符*/

if (p[i]=='.')
count++;
if (count>1) //两个以上的小数点
return false;
}
return true;
}
void main()
{
char a[50];
char ch;
cout<<"Enter a float number:"<<endl;
cin>>a;
while (!check(a))
{
cout<<"输入不正确,继续吗?(y/n)"<<endl;
cin>>ch;
if(ch=='y'||ch=='Y')
cin>>a;
else
exit(0);
}
cout<<"输入的浮点数为:"<<atof(a)<<endl;

}


ipgk 2003-10-10
  • 打赏
  • 举报
回复
lionhu2003(我为编程狂)的程序有问题:
输入0时判别不是浮点数
确认“输入的不是浮点数,要重新输入吗?(Y Or N):”时若连续输入几个字符就出问题
输入字母和数字的混合时有问题

说到底还是没有解决健壮性问题。
lemon520 2003-10-10
  • 打赏
  • 举报
回复
楼上的,强!!!!
point_to 2003-10-10
  • 打赏
  • 举报
回复
try:
float fff;
cout<<"fff=";
while(!(cin>>fff) )

{
cin.clear();//
cin.ignore();//
cout<<"error!input again: ";
}
cout<<fff<<endl;
cnxiaohai 2003-10-10
  • 打赏
  • 举报
回复
楼上的

你说的不对

你不能防止客户不出现错误的输入

在软件测试阶段

这也是"破坏性测试"的一个环节

lionhu2003(我为编程狂) 的程序很漂亮

我就不写了

楼主对编程的严格要求是我们要学习的

playboyxp 2003-10-10
  • 打赏
  • 举报
回复
你既然定义了是float
为什么要输入字符串呢
如果要输入字符串用指针或者数组
lionhu2003 2003-10-10
  • 打赏
  • 举报
回复
可以这样限制

#include <iostream.h>
#include <stdlib.h>

void main()
{
char chtof[10];
char ch;
cout<<"请输入一个浮点数: ";
cin>>chtof;
cout<<chtof<<endl;

while (atof(chtof)==0)
{
cout<<"输入的不是浮点数,要重新输入吗?(Y Or N): ";
cin>>ch;
if (ch=='y' || ch=='Y')
cin>>chtof;
else if (ch=='n' || ch=='N')
break;
}
if (atof(chtof)!=0)
cout<<"输入的浮点数为"<<atof(chtof)<<endl;
}
leyt 2003-10-10
  • 打赏
  • 举报
回复
char a[]
ipgk 2003-10-10
  • 打赏
  • 举报
回复
先用字符串方式读入再判断是否数字
sharkhuang 2003-10-10
  • 打赏
  • 举报
回复
不懂说什么?
加载更多回复(1)

69,337

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧