社区
C语言
帖子详情
输入输出问题?急!!!望高手们快!!!!
sureli
2003-10-10 12:41:37
float a;
cin>>a;
我现在输入的是jjjj,不是浮点型,程序就会出错,
那么我怎么控制用户输入的一定是浮点型,而不是其他类型的?
...全文
49
21
打赏
收藏
输入输出问题?急!!!望高手们快!!!!
float a; cin>>a; 我现在输入的是jjjj,不是浮点型,程序就会出错, 那么我怎么控制用户输入的一定是浮点型,而不是其他类型的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
下面是一个残缺的程序,不过大体功能是可以看出来的,我实在是改不了了,
急
啊!!望
高手
指点!!!
//CS,SK,DI,DO,ROW,COL,D_R,R_W
ROW EQU P0
COL EQU P3
ORG 0000H
AJMP MAIN
//键盘处理总函数
MAIN:
zongjianpanchuli:
MOV R6,#04H
KEY:
MOV P1,#0F0H
T2:
MOV A,P1
CJNE A,#0F0H,XU9
java开发速成班培训课程(10)
[url=http://www.buildapp.net/java/show.asp?id=21000]求!!
高手
进[/url] [url=http://www.buildapp.net/java/show.asp?id=20999]甘特图中如何控制进度条的宽度?
急
![/url] [url=http://www.buildapp.net/java/show.asp?id=20...
我在CSDN参与的3000个帖子
今日偶然翻到,感慨万千 1:申述:版主,是否扣了我的专家分? 2:100分
急
求,随机输出十个小写字母,但是,要求这十个字母不相同 3:求Sn=a+aa+aaa+…+aaa…a(n个a)之值 4:数组题 望
高手
帮忙! 5:呵呵,来推荐一下我的网站,本站提供大量当今流行的免费的音乐和免费电影,常用软件、游戏、精美图库下载,希望对网友有帮助!顺便散分! 6:VBA请教怎
如何成为Android
高手
要成为Android
高手
并不是一件容易的事情。并不是很多人想象的 能够飞
快
的写出几行漂亮的代码去解决一些困难的
问题
就是Android
高手
了。真正的Android
高手
需要考虑的
问题
远远不是写些漂亮的代码就足够的。下面是成为一名真正的Android
高手
必须掌握和遵循的一些准则: 1. 学会懒惰 2. 精通Android 体系架构、MVC、常见的设计模式、控制反转(IoC) 3. 编
[转贴]分贝是个什么东西?(好东东)
大家都是用计算机做音乐的
高手
了……呃,那位同学!别紧张嘛~看你激动的,
高手
其实也没什么了不起的……不信?那我问问你几个
问题
,你答得上来,算你了不起!我们用电脑做音乐的时候,经常会接触到各种各样的表,无论是测量什么的表,它们都离不开一个单位——分贝(dB),我的
问题
就和它有关,听好了:1. 20dB和60dB究竟差多少?(不要回答我60-20=40(dB),我抽你呀!你告诉我40dB究竟是多响,难道...
C语言
69,369
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章